#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ int a=10,b;char flang ; printf("\n 綠燈亮,車等等先!"); do{ printf(" \n 輸入: "); scanf("%c",&flang); printf("\n****還要等%d秒****\n",--a); if(a==0)break; }while(flang!=' '); printf("\n 紅燈亮,人等等!\n"); system("PAUSE"); return 0;}每次運行到 printf(" \n 輸入: "); scanf("%c",&flang); printf("\n****還要等%d秒****\n",--a);都會被執行兩次,不知為什么。請知道的告訴我!謝謝!
熱心網友
這個是因為你在Scanf那里要輸入一個字符賦給flang。要回車,對不起這個回車被緩存給作為下次scanf的輸入值,這就是為什么看上去執行兩次。要對他不執行兩次,一是選擇其他的字符輸入函數如getch()(這不回顯)等,二,用條件控制回車鍵和Scanf的輸入。反正有很多方法。給一個改正:頭上加一個#include "string.h"scanf("%c",&flang)==flang=getchar();(輸入一個字符就執行下一步,回車都省了,不專業的說話,呵呵。)
熱心網友
這個問題以前經常遇到,我采用的方法是在scanf后面添加一個函數getch()就可以了。你可以試一下。另外由于TC函數庫編寫的問題,scanf語句有時不能連續使用(尤其是兩次不同類型的輸入時),確實比較麻煩。
熱心網友
...我來晚啦不過如果是用c++程序的話,連上面的事情都省了直接用 “cinflang;”很方便,運行的時候會象wtsjr1982 說的輸入一個字符,敲回車就不會出現這個問題
熱心網友
wtsjr1982 分析得有道理, 只要把scanf("%c",&flang); 改成 scanf("%c\n",&flang); 就行了。試一下看:#include #include int main(int argc, char *argv[]){int a=10;char flang ;printf("\n 綠燈亮,車等等先!");do{ printf(" \n 輸入: \n");scanf("%c\n",&flang);/////////////在這里加\nprintf("\n****還要等%d秒****\n",--a); if(a==0)break; }while(flang!=' ');printf("\n 紅燈亮,人等等!\n");system("PAUSE"); return 0;}。