【问题标题】:Getting different output while writing to file写入文件时获得不同的输出
【发布时间】:2015-04-09 13:04:16
【问题描述】:

我编写了一个程序来保存足球队的统计数据。我将统计信息保存在一个文件中,并将所有匹配项记录在另一个名为“record.txt”的文件中。

在我的record.txt文件中,写法的格式是:

[对手名称] [当前日期]

我面临的问题是,有时我在一行中得到“对手名称”“日期”,有时日期在新行中开始

这是我得到的图片 pic of output file

这是我的代码

time_t rawtime;
struct tm * timeinfo;
char buffer [80];

time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer,80,"%d/%m/%y",timeinfo);

/* current date acquired */
FILE *history;

history = fopen("record.txt", "a");

char opponent[10];   //opponent name

printf("Opponent Name: ");
fgets( opponent, 10, stdin);
fprintf(history, "Opponent: %s %s\n", opponent, buffer);

fclose(history);

【问题讨论】:

  • 请在此处重新发布代码和示例输出,并非每个人的网络都允许使用 pastebin 或 imgur。
  • 您根本不执行任何检查,fopen()/fgets() 可能会失败,您必须进行检查。
  • 我已经发布了代码。不幸的是,我不允许发布照片
  • fgets( opponent, 10, stdin); --> scanf("%9[^\n]", opponent);
  • scanf("%9[^\n]", 对手); //关于这是如何工作的任何解释? (或参考)

标签: c windows file strftime


【解决方案1】:
fgets(opponent, 10, stdin);

请注意,fgets() 在您按下 stdin 时会读取换行符,而您并没有抑制它。如果您希望同一行中的两个字符串都抑制换行符,例如

size_t n = strlen(opponent);
if (n > 0 && opponent[n -1] == '\n') 
    opponent[n - 1] = '\0';

【讨论】:

  • 当然,如果你建议检查fopen()/fgets()返回值也很好。现在这是一个更好的答案。
  • 这行得通!。谢谢你。不知道我必须检查换行符。顺便说一句,为什么有时我会得到正确的格式?
  • @JahirIslam 也许你不按回车键而是按 Ctrl+D 或 Ctrl+Z。
  • @iharob 不,我输入名字后总是按回车。
  • @JahirIslam 可能是输入很长,填满了 9 个字符并且没​​有换行符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多