【问题标题】:enter a number in while loop in c by fgets通过 fgets 在 c 中的 while 循环中输入一个数字
【发布时间】:2021-06-25 22:27:42
【问题描述】:

我正在尝试通过fgets 从键盘循环(一次又一次地)获取一个数字。但它只在循环的第一次获得数字。然后程序不再要求号码(我的意思是她不让我输入号码)并退出。

while(1){
    printf("Option: ");
    char buf[4];
    if(buf == fgets(buf,4,stdin)){
        int ret;
        ret = sscanf(buf,"%d",&num);
        if(ret!=1)
           exit(0);         
    }
}

【问题讨论】:

  • 您输入的数字有多大?如果您输入的字符超过 3 个,则第二次调用 fgets() 将处理输入的其余部分。
  • 您提供的输入是什么?超过 99 个?
  • 不只是数字 1 或 2
  • 可能是打印问题? printf 是行缓冲的,直到在字符串中看到换行符或调用 fflush 时才会输出。你可以试试:printf("Option: "); fflush(stdout);
  • 请创建一个minimal reproducible example。显示您使用的输入、您获得的相应实际输出和预期输出。我无法用问题中的代码 sn-p 重现问题。见onlinegdb.com/SyIt1AJrd

标签: c scanf fgets


【解决方案1】:

我无法重现该问题:

#include <stdio.h>
#include <stdlib.h>

#define LEN 4

int main() {
    while(1){
        printf("Option (terminate with non-number like enter): ");
        char buf[LEN];
        if(fgets(buf, LEN, stdin)) {
            int num;
            if(sscanf(buf,"%d",&num) != 1) break;      
            printf("Number was %d\n", num);
        }
    }
    return 0;
}

有一个示例会话:

Option: 1
Number was 1
Option: 2
Number was 2
^C

【讨论】:

  • 如果回答了您的问题,请接受并在有帮助的情况下投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2013-04-23
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多