當前位置:首頁 » 編程軟體 » 企石編程

企石編程

發布時間: 2022-06-21 23:46:45

A. C語言 投票程序

#include <stdio.h>
int main(void)
{
int iNum;
char szStr[128] = "";

scanf("%d", &iNum);
getchar(); /* 嘗試一下去掉這一句會怎樣 */
gets(szStr);
puts(szStr);

return 0;
}
/*
把你不懂的地方分離出來了。
一、運行結果:
①如果有那個getchar:
1
abc
abc
Press any key to continue
②如果沒有那個getchar:
1

Press any key to continue
(注意1後面有個換行,然後輸出「Press any key to continue」)
二、解釋
標准庫中scanf、printf之類的函數是帶緩沖的(我不知道准確點該怎麼說),意思就是: 當用戶調用scanf函數輸入一串數據時, 這些數據並不是直接送給變數了, 而是先送入 標准IO緩沖區, 當執行刷新操作時,這些數據才被賦給變數;
那麼怎麼執行刷新操作呢, 對於scanf函數, 這個刷新操作往往通過敲擊回車鍵來完成。最開始, 標准輸入緩沖區是空的。當你從鍵盤輸入一個整數1時, 這個整數1被送入輸入緩沖區, 然後當你敲一下回車鍵,緩沖區中的1才會被取走賦給iNum;但是scanf函數嫌棄'\n', 這樣, 你剛才敲擊的回車鍵(其實也是一次輸入操作)又往緩沖區中送了一個回車符。
這樣經歷了:輸入1-》敲回車, 完成了給iNum賦值1, 同時輸入緩沖區中留下了一個'\n'
①如果有那個getchar,執行到getchar();這一句,這個函數會嘗試從緩沖區中獲取一個字元,而此時緩沖區中恰好有一個回車符, 所以getchar就把這個回車符拿走了(雖然並沒賦給任何變數),接下來遇到了gets函數, 由於緩沖區是空的, 所以這個函數就等著我們輸入字元串(「abc」), 然後回車, 把這個字元串送給szStr, ……
②如果沒有那個getchar, 執行scanf後, 緩沖區中殘留一個回車符'\n', 然後執行到gets函數時, gets函數也嘗試從緩沖區中讀取字元(串), 恰好此時緩沖區中有個'\n', 而恰好gets函數又不嫌棄'\n',所以gets函數直接拿走了這個換行符送給了szStr, 因此szStr中內容: "\n\0", 這樣調用puts函數時就是輸出一個換行符然後換行輸出「Press any key to continue」

由此可見,這里的getchar具有過濾作用, 不然的話循環體的第一次執行gets(c)將不等待用戶輸入而直接得到一個回車符。
還有不懂可以HI我。
*/

熱點內容
超凡先鋒配置不行怎麼辦 發布:2025-05-15 23:27:54 瀏覽:530
win7取消加密 發布:2025-05-15 23:26:37 瀏覽:470
不用internet打開ftp 發布:2025-05-15 23:06:00 瀏覽:153
sql字元串取數字 發布:2025-05-15 22:57:45 瀏覽:124
推薦編程課 發布:2025-05-15 22:34:12 瀏覽:618
表拒絕訪問 發布:2025-05-15 22:29:37 瀏覽:978
電腦怎樣解壓文件 發布:2025-05-15 22:25:32 瀏覽:439
dns伺服器怎麼看 發布:2025-05-15 22:17:27 瀏覽:151
3dm的壓縮包 發布:2025-05-15 22:09:23 瀏覽:662
和存儲字長 發布:2025-05-15 21:54:09 瀏覽:515