c - stdin 的 fscanf 不提示输入

标签 c pointers struct fgets scanf

下面给出了我的代码片段。我了解到最好使用 fscanf 而不是 scanf。但是 fscanf 并不等待输入

switch (argc) {
            case 2: printf("\nEnter the subject code: ");
                while(fgets(temp_op->subject, BUF_NOTES, stdin)==NULL);
            case 3: printf("\nEnter the topic: ");
                while(fgets(temp_op->topic, BUF_TOPIC, stdin)==NULL);
            case 4: printf("\nEnter the Level: ");
                flag = fscanf(stdin,"%d",&temp_op->level);
            case 5: printf("\nEnter the Answer Key: ");
                while(fgets(temp_op->key, BUF_KEY, stdin)==NULL);
            case 6: printf("\nEnter any additional notes(optional): ");
                while(fgets(temp_op->notes, BUF_NOTES, stdin)==NULL);
                break;
            default:printf("\nExcess Arguments");
        }

问题是针对案例 5 的。 fgets 不是在等待输入,而是情况 6 表现良好。

但是,如果我注释掉 case 4 行“flag =...”,那么下一个 fgets 将提示输入。奇怪。我想知道为什么前面的 fscanf 会影响后面的 fgets。我的结构定义是:

typedef struct {
int mode ;
int level;
char subject[BUF_SUBJECT], topic[BUF_TOPIC], notes[BUF_NOTES], key[BUF_KEY];
} operation;

完整来源位于 http://pastebin.com/HVvGC3B7

有什么问题吗?

最佳答案

您正在将 scanf()fgets() 混合使用 - 最好避免。

fscanf(stdin,"%d",...\n 留在输入队列中,以下 fgets() 无需等待额外输入即可使用。

推荐使用 fgets() thoguhout 并使用 sscanf(buffer, "%d", ... 获取整数。

关于c - stdin 的 fscanf 不提示输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279474/

相关文章:

c - linux - 文件系统是否允许产生黑洞?

pointers - 将函数返回的值赋值给指针

struct - golang 2个 slice 类型,1个字段

c++ - 如何动态分配涉及指针的结构?

c - 难以理解指针、动态分配和函数调用行为

c - 从文件加载并保存到数组

c - 当在 printf 中使用 %d 时,float 变量会发生什么?

c++ - 我想知道系统调用()被中断时到达的是哪个信号

c - C中的这段代码是什么?

c++ - "Stack overflow"错误。可能指针不在列表中