【问题标题】:Line of code skipped when getting user input in C [duplicate]在 C 中获取用户输入时跳过的代码行 [重复]
【发布时间】:2021-01-14 07:47:40
【问题描述】:

已经解决了,非常感谢

【问题讨论】:

  • 这能回答你的问题吗? fgets instructions gets skipped.Why?
  • 此外,如果您使用调试器逐行检查代码,您会清楚地看到没有任何内容被“跳过”。你真的应该在发帖之前调试一下。
  • 始终检查 fgets、scanf 等的返回值,遇到任何错误都会失败。
  • 永远不要使用gets!这个评论在这里有什么意义?因为scanf("%s") 有完全相同的问题。切勿在 scanf 中使用 "%s"。始终使用scanf("%14s")(或适当的大小)。
  • scanf("%s") 在遇到空格时会停止,fgets 不会,使用scanf 并不总是正确的。

标签: c scanf user-input fgets


【解决方案1】:

scanf() 准确地读取您要求的内容,将以下 \n 从该行的末尾留在缓冲区中,fgets() 将读取它。我建议也使用fgets() 来读取输入,并使用sscanf() 来读取choice 整数:

    char input[10];

    ...
    fgets(input, 10, stdin);
    sscanf(input, "%d", &choice);

【讨论】:

    【解决方案2】:

    看这里: https://stackoverflow.com/a/20156727/14273548

    由于最少字符,将答案复制到此处。

    在这行 scanf("%d",&e) 之后添加一个 getchar() 像这样:

    scanf("%d",&e);
    getchar();
    

    当你按下 Enter 时,换行符会留在缓冲区中,所以当调用 fgets 时,换行符会传递给它,它的行为就像你按下 Enter 一样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多