[即使使用了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的主要内容,如果未能解决你的问题,请参考以下文章

fgets注意事项

为啥即使测试完成,Chromium 似乎也能正常工作?

fgets 提供资产,试图重新分发 vs2010 MFC 应用程序

fgets() 只读取最后一行 [关闭]

fgets() 和 fread() - 有啥区别?

Admob mediation / w chartboost,即使一切似乎都有效,也没有印象?