C程序在询问用户输入时会跳过一条线


printf("Number of tracks: ");
fflush( stdin );
scanf("%d", &track);
printf("Is this an album or single: ");
fflush( stdin );
scanf("%c", &type);

当我输入5以获取曲目数时,程序显示是专辑或单曲,并且在那里结束程序而不让我输入专辑类型?

点1

不使用 fflush( stdin );,它是未定义的行为。

相关:来自C11标准DocMunet,第7.21.5.2章,(强调我的)

int fflush(FILE *stream);

如果stream指向输出流或最新操作的更新流,则FFLUSH函数会导致将该流传递到主机环境的任何不成文数据,以写入文件;否则,行为是未定义的。

点2 (要完成工作, fflush(stdin)

更改

scanf("%c", &type);

to

scanf(" %c", &type);
      ^
      |

领先的空格忽略了缓冲区中的类似空格的字符,并读取stdin的第一个非Whitespace字符。

相关内容

  • 没有找到相关文章