所以,我有这段代码,然后继续将“名称”保存到二进制文件中。
scanf("%d", &option);
while(getchar() != '\n');
fgets(name,MAX_SIZE,stdin);
我认为fgets保留了该'\ n',导致第一个单词保存在二进制文件的第2行中,然后每个单词都保存在新行中。但是,当我退出循环之前继续将其他内容保存到另一个二进制文件时,字符串将被连续保存。
如何摆脱“ \ n”?非常感谢。
答案 0 :(得分: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)
,则会获得换行符,但您不太可能会问到这一点。