首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言地毯覆蓋問題:scanf 格式字符串缺失百分號導致輸入失敗

     編輯:程式設計疑難解答

問題代碼

scanf("d", &n);  // 錯誤:缺少 % 號

錯誤分析

  • "d" 被視為普通字符匹配,而非格式說明符
  • scanf 期望輸入流中出現字符 'd'
  • 實際輸入是數字,匹配失敗,n 未被賦值 (保持未初始化垃圾值)
  • 后續邏輯基于錯誤的 n 執行,結果不可預期

正確寫法

scanf("%d", &n);  // %d 表示讀取十進制整數

完整修正程序

#include <stdio.h>

int main() {
    int n, i;
    int a[10001] = {0}, b[10001] = {0}, g[10001] = {0}, k[10001] = {0};
    int x, y, j, r = -1;
    
    scanf("%d", &n);  // 修正:添加 %
    for (i = 0; i < n; i++) {
        scanf("%d %d %d %d", &a[i], &b[i], &g[i], &k[i]);
    }
    scanf("%d %d", &x, &y);
    
    for (j = 0; j < n; j++) {
        if ((x >= a[j]) && (x <= (a[j] + g[j])) && 
            (y >= b[j]) && (y <= (b[j] + k[j]))) {
            r = j + 1;  // 編號從 1 開始
        }
    }
    printf("%d", r);
    return 0;
}

scanf 格式字符串速查

格式符含義對應參數類型
%d / %i有符號十進制整數int *
%ld長整數long *
%lld長長整數long long *
%f浮點數float *
%lf雙精度浮點數double *
%c單個字符char *
%s字符串 (遇空白停止)char * (需預分配空間)

調試技巧

  1. 檢查返回值:if (scanf("%d", &n) != 1) { /* 輸入錯誤處理 */ }
  2. 編譯器警告:GCC -Wformat 可檢測格式字符串與參數不匹配
  3. 輸入緩沖區清理:混合輸入時注意換行符殘留

總結

一個 % 符號的缺失導致整個程序輸入邏輯失效。scanf 格式字符串必須以 % 開頭表示轉換說明,**細心檢查格式字符串是 C 語言輸入調試的第一步**。

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