首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言編程實戰經驗:scanf 返回值、多字符串輸入、清屏與暫停

     編輯:關於C語言

C 語言看似簡單,實則坑點眾多。本文總結五大實戰經驗,助你避開輸入處理、跨平台兼容、語言特性誤解等常見陷阱。

1. 善用 scanf 返回值驗證輸入

scanf 返回成功讀取的變量數。利用此特性可構建健壯的輸入驗證循環:

int a = 123;
printf("請輸入整數:\n");
while (scanf("%d", &a) != 1) { // 非法輸入返回 0 或 EOF
    printf("錯誤,重新輸入:\n");
    setbuf(stdin, NULL); // 清空輸入緩衝區
}
printf("a = %d", a);

輸入 k 時,scanf 返回 0,進入循環提示重輸,配合 setbuf(stdin, NULL) 清除殘留換行符。

2. 多字符串輸入必須指定分隔符

scanf("%s,%s", p1, p2) 輸入 abcd,efgh 會導致 p1="abcd,efgh"、p2 亂碼,返回值 1。正確分隔符:空格、換行、Tab:

scanf("%s %s", p1, p2);      // 空格分隔
scanf("%s\n%s", p1, p2);     // 換行分隔
scanf("%s\t%s", p1, p2);     // Tab 分隔

若字符串含空格,請用 gets() 或 fgets()。

3. 跨平台清屏函數

// Windows
system("CLS");
// Linux/macOS
system("clear");

建議封裝為宏或函數實現跨平台編譯。

4. 程序暫停:system("pause") vs getchar()

  • system("pause"):Windows 專用,提示「按任意鍵繼續」
  • getchar():跨平台,等待輸入字符(需注意緩衝區殘留換行符)

Linux 下 system("pause") 無效,推薦 getchar() 或自定義等待函數。

5. C 語言沒有引用(Reference)

代碼中用了 &var 作為函數參數類型(如 void f(int &a)),這是 C++ 引用語法。C 僅支持指針傳遞地址。若誤用 .c 文件編譯 C++ 代碼會報錯,需改為 .cpp 或改用指針。

嚴蔚敏《數據結構》C 版書中混用 C++ 引用,導致許多初學者誤以為 C 支持引用。

總結

細節決定成敗。掌握輸入驗證、分隔符處理、跨平台差異、語言特性邊界,是寫出健壯 C 代碼的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved