如何获取每行中的字符数?
Posted
技术标签:
【中文标题】如何获取每行中的字符数?【英文标题】:How do I get number of characters in each line? 【发布时间】:2019-05-23 21:38:01 【问题描述】:我需要获取每行中的字符数,然后将其粘贴到另一个文件(学校项目)中,但即使我的原型已经无法工作。
当我将它粘贴到另一个文件时,我已经尝试继续查看问题是否自行解决,但它没有工作,所以我回到了这个。
int main()
FILE *fw;
FILE *fr;
int i = 0;
char c;
fr = fopen("vstup.txt","r");
fw = fopen("vystup.txt","w");
while ((c = getc(fr)) != EOF)
while ((c = getc(fr)) != '\n')
i++;
printf("%d\n", i);
【问题讨论】:
究竟是什么不适合您?顺便说一句,您正在跳过每行中的第一个字符。 你没有把计数器归零...char c
应该是int c
。
也许看看this post 和 cmets 中的链接。
Comparing unsigned char and EOF的可能重复
【参考方案1】:
c
必须声明为 int
,而不是 char
。 EOF
可能不是有效的 char
值,因此不等式可能永远存在。
您不应两次致电getc()
。您永远不会检查第一次调用的结果是否是换行符。
您需要在读取换行符后将i
设置回0
,否则您将继续将下一行的长度添加到上一行。
您应该只在读取换行符时打印长度,而不是每次通过循环。如果最后一行不以换行符结尾,则应在循环后打印其长度;如果完成后i
不是0
,您就可以知道发生了这种情况。
由于长度应该写入另一个文件,你应该使用fprintf()
。
while ((c=getc(fr)) != EOF)
if (c == '\n')
printf("%d\n", i);
i = 0;
else
i++;
if (i != 0)
fprintf(fw, "%d\n", i);
【讨论】:
【参考方案2】:您不需要嵌套循环。无论哪种方式,您都需要将计数器归零,因此您不妨只使用if
而不是一段时间:
int main()
FILE *fw, *fr;
int count = 0;
int c;
fr = fopen("vstup.txt","r");
fw = fopen("vystup.txt","w");
while ((c = getc(fr)) != EOF)
count++;
if(c == '\n')
fprintf(fw, "%d\n", count);
count = 0;
fclose(fr);
fclose(fw);
此版本会将换行符视为有效字符。
注意c
必须是int
,而不是char
,这样它就可以保存getc
和EOF
返回的每个字符值,这不是字符值。
别忘了关闭你的文件!
【讨论】:
@Eric。那确实好多了,所以我无耻地窃取了你的建议。 不是偷的;它是免费提供的。教别人改进答案比我自己写所有东西做得更多。 @Eric。谢谢你。大多数时候我都有同样的感觉。以上是关于如何获取每行中的字符数?的主要内容,如果未能解决你的问题,请参考以下文章