在迴圈中的scanf()不被執行面陷入死迴圈
阿新 • • 發佈:2019-02-02
今天好蠢,之前忙於應付期末考試編個小程式手都生了,
scanf("%d",&p->num);寫成了scanf("&d",&p->num);
【當時還以為是結構體的問題呢= =】
還有,scanf裡的“”中間的部分並不會給你檢錯!!!
原因:
'&d'並不是一個符合scanf格式化的一個輸入,因為格式化要求輸入一個“&d”,所以輸入成功的個數就0,也就是scanf返回值=0
此時程式進入下一個迴圈,由於上次的'a'並不符合格式化輸入,所以'a'被緩衝,放到下一個scanf輸入中,此時'a'又不符合規定,就進入下一個迴圈,這樣就形成了死迴圈
下面這段程式碼摘自:http://bbs.csdn.net/topics/390385703
#include<stdio.h> int main(void) { int i; int b = 1; while (b) { int c; c = scanf("%d", &i); /* 當你輸入一個字元,如:'a'時,此時'a'並不是一個符合scanf格式化的一個輸入, 因為格式化要求輸入一個整數,所以輸入成功的個數就0,也就是c=0 此時程式進入下一個迴圈,由於上次的'a'並不符合格式化輸入, 所以'a'被緩衝,放到下一個scanf輸入中, 此時'a'又不符合規定,就進入下一個迴圈,這樣就形成了死迴圈*/ printf("%d\n", c); if (c == 1) b = 0; else printf("your input wrong,you can input only a charactr,try again\n"); } printf("the num is:%d", i); return 0; }