【问题标题】:Why is the last printf() not printing?为什么最后一个 printf() 不打印?
【发布时间】:2017-05-19 20:58:47
【问题描述】:

我试图创建一些用户必须提供某些数字的东西,最后程序会打印所有数字,中间有一个空格。 一切正常,除了最后一个printf()。我已经尝试像以前的scanf() 一样进出fflush,但没有任何效果。

有什么建议吗?代码如下:

printf("Give a round number:\n");
fflush(stdout);
scanf("%d", &roundNumber);
fflush(stdin);

printf("Give a decimal number:\n");
fflush(stdout);
scanf("%lf", &decimalNumber);
fflush(stdin);

printf("Give 2 round numbers separated by a ',' :\n");
fflush(stdout);
scanf("%d,%d",firstRoundNumber,secondRoundNumber);
fflush(stdin);

printf("Your numbers: %d %lf %d %d\n", roundNumber, decimalNumber, firstRoundNumber, secondRoundNumber);

【问题讨论】:

  • scanf("%d,%d",&firstRoundNumber,&secondRoundNumber);
  • scanf("%d,%d",firstRoundNumber,secondRoundNumber); -> scanf("%d,%d",&firstRoundNumber,&secondRoundNumber);
  • 另外,'fflush(stdin);'是 UB。
  • 另外,调试失败 - 单步执行会表明 printf() 甚至没有到达。
  • 这里是 C11 标准的便捷链接,引用为 what is the use of fflush(stdin) in c programming。此外,如果您只是在 backticks(例如`stuff`)中将内联代码包含在 cmets 中,它将被偏移为固定宽度。

标签: c printf fflush


【解决方案1】:

你写的

scanf("%d,%d",firstRoundNumber,secondRoundNumber);

您忘记为最后一个 scanf 使用变量地址:

scanf("%d,%d", &firstRoundNumber, &secondRoundNumber);

【讨论】: