1. 程式人生 > >關於c語言scanf函式中格式化輸入中加入空格的一個問題

關於c語言scanf函式中格式化輸入中加入空格的一個問題

考慮如下一小段程式:

#include<stdio.h>
int main()
{
    int i = 0;
    int num[5];

    for(i = 0;i < 5;i++){
        scanf("%d ",&num[i]);
        printf("num[%d]:%d\n",i,num[i]);
    }

    return 0;
}

當輸入序列是:1 2 3 4 5時,還是什麼樣的情況呢?
這裡寫圖片描述
在我進行測試的時候發現,我已經輸入5個數了,但是scanf的讀入並沒有結束,讀入游標也一直在閃動。這就很奇怪了,不是讀入五個數字嗎?不是應該輸入結束了嗎?仔細檢查程式碼,我們可以發現,並不是我們在哪要多讀入一個數字,那是為什麼呢?測試一下!既然它游標還在閃動,那再輸入一個數進去看看,
這裡寫圖片描述


我們發現在輸入一個數字就好了,而且就是讀入我們輸入的前5個數字,那就很奇怪了,明明已經讀到了可為什麼還不結束輸入呢?再仔細檢查一遍程式碼,其實問題就出現在一個空格上!!!觀察這段程式碼:

scanf("%d ",&num[i]);

“%d ” 裡是一個%d加一個空格,這是程式讀入資料時的格式,這個格式是什麼意思呢?
這個格式的意思是說是在讀完一個整數後,格式中的空格還需要匹配一次有效的輸入,就是需要再讀一個整數。所以也就造成了輸入6個數據只讀取了5個。所以把格式中的空格去除即可。