[即使使用了getchar,fgets似乎也可以“获取” \ n

问题描述 投票:1回答:1

所以,我有了这段代码,然后继续将“名称”保存到二进制文件中。

scanf("%d", &option);
while(getchar() != '\n');

fgets(name,MAX_SIZE,stdin);

我认为fgets保留了该'\ n',因为第一个单词保存在二进制文件的第2行中,然后每个单词都保存在新行中。但是,当我退出循环之前继续将其他内容保存到另一个二进制文件时,字符串将连续保存。

我如何摆脱那个'\ n'?非常感谢。

c scanf buffer fgets
1个回答
0
投票

请注意,读取换行符的正确循环也需要考虑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),则会获得换行符,但不太可能会问到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.