呼叫scanf函式的乙個陷阱

2021-09-14 01:10:32 字數 1192 閱讀 8666

我們在寫c程式時,經常使用scanf函式,讓使用者輸入資料,可是有時候會出現一些很奇怪的問題。例如,下面的程式是乙個簡單的四則運算:

#include int main()  

printf("運算結果是: %d\n", result);

return 0;

}

此程式不管從語法,還是邏輯上,都沒有問題,且編譯也能通過。實際執行時,卻是如下結果:

在使用者輸入第乙個運算引數後,按照程式的設定,應該讓使用者輸入運算子,可是直接讓使用者輸入第二個運算引數了。你能看出這是為什麼嗎?

我們修改下程式,如下:

#include int main()  

printf("運算結果是: %d\n", result);

return 0;

}

我們加入兩行**,輸出字元引數ope的ascii碼值,結果如下:

可以看到,ope的ascii碼值是10,正是換行符的ascii碼值。我們什麼時候把換行符給了ope?其實,在我們給運算引數para1賦值1的時候,我們按下了回車鍵,準備輸入運算子,可是系統不懂啊,系統把回車鍵理解為換行符賦值給了ope,所以接下來會跳過讓使用者輸入運算子而直接讓使用者輸入運算引數2了,問題就在這裡。

知道了問題所在,那麼就好解決了。 請看:

#include #include int main()  

printf("運算結果是: %d\n", result);

return 0;

}

在每次scanf結束後,加入getchar函式,即可。getchar函式從輸入流中讀取乙個字元,因此可以接收我們每次按下的回車鍵,也就是換行符。執行結果如下:

scanf 乙個神奇的函式

scanf函式,與printf函式一樣,都被定義在stdio.h裡,因此在使用scanf函式時要加上 include。它是格式輸入函式,即按使用者指定的格式從鍵盤上把資料輸入到指定的變數之中,其關鍵字最末乙個字母f即為 格式 format 之意。scanf 格式控制,位址表列 int scanf c...

Vue的乙個陷阱

最近做專案,上線前一直有個bug,不知道是什麼原因引起的,vm.set needverification true verification button prop disabled true verification button addclass verification disab needv...

關於C 中getline 函式的乙個陷阱

最近寫 的時候遇到乙個問題,就是getline函式接受標準輸入 鍵盤 時,失效了。請先看 include include include using namespace std int main 執行時沒問題的,先輸入乙個數字,再輸入你的名字,讓我們試試,結果如下 讀者可以自己動手試試,會發現還沒有...