[即使使用了getchar,fgets似乎也可以“获取” n
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[即使使用了getchar,fgets似乎也可以“获取” n相关的知识,希望对你有一定的参考价值。
所以,我有了这段代码,然后继续将“名称”保存到二进制文件中。
scanf("%d", &option);
while(getchar() != '\n');
fgets(name,MAX_SIZE,stdin);
我认为fgets保留了该'\ n',因为第一个单词保存在二进制文件的第2行中,然后每个单词都保存在新行中。但是,当我退出循环之前继续将其他内容保存到另一个二进制文件时,字符串将连续保存。
我如何摆脱那个'\ n'?非常感谢。
答案
请注意,读取换行符的正确循环也需要考虑EOF(输入的最后一行可能不会以换行符结尾,因此应为:
int c;
while ((c = getchar()) != EOF && c != '\n')
;
读取名称的代码可能应该像这样,再次记住可能没有任何输入,因此fgets()
可能表示EOF:
char name[MAX_SIZE];
if (fgets(name, sizeof(name), stdin) != NULL)
name[strcspn(name, "\n")] = '\0';
…write name to binary file…
name
开头不会有换行符;如果用户只是按下return而不是输入名称,则可能没有任何name
,但是您可以轻松地检测到。您可能还希望删除开头和结尾的空格,甚至可以规范行中的空格(确保将一个或多个空格字符的所有序列替换为单个空格)。
由于您尚未显示如何将数据写入“二进制文件”,因此尚不清楚任何人都可以为您提供更多帮助。如果添加了写数据的代码,您将得到一个更有用的答案。例如,如果您使用fprintf(fp, "\n%s\n", name)
,则会获得换行符,但不太可能会问到这一点。
以上是关于[即使使用了getchar,fgets似乎也可以“获取” n的主要内容,如果未能解决你的问题,请参考以下文章