回覆列表
  • 1 # a不會愛的小笨蛋

    c語言中在讀取鍵盤資料時,一般是帶快取的資料輸入,需要按回車鍵才能完成該“行”資料的輸入確認。而 scanf()函式對這個回車確認符並不進行處理,回車符會留在輸入快取區中。因此,在下一個讀“字元”操作函式(getchar, scanf("%c"), gets()等)執行時,會讀到這個字元。而在讀數值型資料或字串時,scanf()會從第一個非空白字元(空白字元指:回車,空格,TAB鍵)開始讀取,自動忽略前面的空白字元,而遇到空白字元結束該型別資料的輸入。因此,是否一定要在scanf後面跟個 getchar吃回車,要看下一個輸入的資料型別是什麼,如果是讀字元類操作,處理辦法有多種方式:一、用fflush(stdin)命令強行重新整理輸入快取,丟棄輸入快取中的資料,此種方法在windows下使用有效,linux無效。

    char ch;fflush(stdin); //不管快取中有沒有資料,強行清除ch=getchar(); //這裡會等待使用者輸入一個字元

    二、前面有讀資料操作,現在要執行讀字元操作,則可用getchar()來吃掉前面的回車確認

    int i;char ch;scanf("%d", &i ); //讀一個整數,回車確認getchar(); //先吃掉回車確認符,這兩句,效果同下一方法的那一句ch=getchar(); //這裡會等待使用者輸入一個字元

    三、在scanf()書寫上做文章,如:讀一個數據,以回車確認,則輸寫成如下格式

    int i;char ch;scanf("%d%*c", &i ); //%*c表示讀一個字元,並不賦值給任何變數ch=getchar(); //這裡不會讀到回車符

  • 中秋節和大豐收的關聯?
  • 裝修的專案經理的職責有哪些?