你这个程序问题多多啊。
首先编译时报错:
a.c:16: warning: comparison between pointer and integer
这是一个警告,不理它也能运行程序,但对程序员来说,任何警告都不要忽略。仔细检查就会发现:
if((m>='A'&&m<='Z')||(m>='a'&&a<='z'))
这里面最后一个比较,你发现了什么?
另外你这个逻辑不对。一直在循环i,实际上getc(A)可能早就读到文件尾结束了。你需要判断一下是否文件结束。
更为关键的是:你每读一个字符,i就+1了,所以你的每一个数组,都是只保存了一个字符。
另外就是你最后的输出,printf("%s",a);这样不行啊,只输出一个,应该用循环,输出每一个数组:
n=i;
for (i=0;iprintf("%s\n",a[i]);
虽然这样改了,你的程序还是不对。。。。
最后,你需要关闭文件。虽然这个不影响程序执行,但关闭打开的文件和释放分配的内存,是一个好习惯。
建议你循环时,使用getc(A)的结果是否是EOF来循环。然后在里面读到是字符,就j++,如果不是字符,则跳到下一个单词了,就先把该数组末尾补0(a[i][j]=0,再让i++,同时让j=0;
while ( (m=getc(A)) != EOF)
{
if (m .....)
else
}
这样的话应该能实现你的功能,但可能会有连续多个非单词,造成i++次数太多,而有空数组的情况。考虑一下如何避免这种情况?
具体程序就不写了,显然你在努力学习,所以根据这个思路自己去改程序吧。