下面給出的是我的代碼片段。我學會了更好地使用fscanf
而不是scanf
。但fscanf不等待輸入fscanf for stdin不提示輸入
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");
}
問題是針對case 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
出了什麼問題?
是否'fscanf'留在緩衝區中的換行符? – nhgrif
嘗試'fflush()'強制輸出緩衝區發出,通常發生在'\ n'上。 – PaulProgrammer
順便說一句,你忘記'break;'在開關 –