【发布时间】:2016-05-29 17:25:17
【问题描述】:
我正在开发一个代码,用户将键入几个段落,当用户以“END”开始一个段落时,它将停止阅读。该代码将通过计算每个字母并显示图表和等等来操纵字符串,但这与问题无关。 问题是:哪个段落必须不超过 1000 个字符。
代码的较小版本如下(考虑到我只想存储 5 个字符的字符串 - 即使我会扩展它)。
#include <stdio.h>
#include <string.h>
int main()
{
char paragraph[5];
for ( ; ; )
{
fgets(paragraph, 5, stdin);
if (paragraph[0]=='E' && paragraph[1]=='N' && paragraph[2]=='D')
{ return 0; }
printf("%s", paragraph);
}
return 0;
我的问题是:如果我输入超过 5 个字符,printf 函数仍然打印超过 5 个字符,我不知道为什么。我已经检查了所有可能检查的内容。
请帮助像我这样的初学者。
【问题讨论】:
-
您的
printf不打印换行符或类似内容,因此您将读取五个字符,打印它们,然后读取另外五个字符并立即打印它们。您一次阅读 5 次,只是您多次阅读。尝试在%s之前打印一个字符以验证是否是这种情况。 -
“我已经检查了所有可能检查的内容。” - 除了来自
fgets的返回值。 -
它输入超过 5 个字符,因为
fgets不会丢弃该行的其余部分:它读取 all 输入。 -
我已经检查过了,在我的知识范围内*
标签: c arrays string sizeof fgets