C语言哪里了出现错误?

2025-04-23 20:13:18
推荐回答(1个)
回答1:

你这个程序问题多多啊。

首先编译时报错:

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;i    printf("%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++次数太多,而有空数组的情况。考虑一下如何避免这种情况?

具体程序就不写了,显然你在努力学习,所以根据这个思路自己去改程序吧。