【问题标题】:C program skips a line when asking for user input [duplicate]C程序在要求用户输入时跳过一行[重复]
【发布时间】:2015-07-21 20:22:06
【问题描述】:
printf("Number of tracks: ");
fflush( stdin );
scanf("%d", &track);

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

当我输入 5 作为曲目数时,程序会显示这是一张专辑还是单曲,并在此处结束程序而不让我输入专辑类型?

【问题讨论】:

  • 注意:冲洗stdin是UB。

标签: c char user-input scanf


【解决方案1】:

第 1 点

不要使用fflush( stdin );,它是undefined behaviour

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

int fflush(FILE *stream);

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

第 2 点 (完成fflush(stdin)应该完成的工作

改变

scanf("%c", &type);

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

前导空白忽略缓冲区中的类似空白字符,并从stdin 读取第一个非空白字符。

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    相关资源
    最近更新 更多