2016-02-14 14 views
0

這是我的代碼:內c - 使用scanf的一系列輸入的,並沒有被打印最後的值(用printf)

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    int i, j; 
    float k, l; 
    char a, b; 
    scanf("%d%d%f%f%c%c", &i, &j, &k, &l, &a, &b); 
    printf("%d %d %f %f %c %c", i, j, k, l, a, b); 
    return 0; 
} 

該方案需要在所有的六個輸入而打印第一5變量。

任何人都可以請在我的概念/程序中指出問題嗎?

+0

什麼是你的輸入? –

+1

不檢查scanf的返回值是一個確定的驚喜配方。 – Jens

回答

1

正如預測的那樣,問題是與%c

的scanf( 「%d%d%F%F%C%C」,& I,&Ĵ,& K,&升,&一個, & b);

因爲它的立場,因爲你的輸入象下面這樣,那麼你的最後一個字符d不會看的 - 而不是空間c被解釋爲你的字符輸入之後:

1 2 3.0 4.0 c d 

所以你scanf應改爲:

scanf("%d%d%f%f %c %c", &i, &j, &k, &l, &a, &b); // <-- Notice there is a space before each %c to read over space characters 

注意:C在這方面確實很奇怪,我想大家在回憶之前都要遇到這個問題幾次出現這種奇怪的問題 - 您應該始終小心scanf%c,並且您需要在它之前添加空格才能正確讀取字符輸入。

+0

非常感謝!我會問,如果在給出輸入的同時,我在第五個輸入後按ENTER鍵並輸入值,我會得到正確的輸出嗎? –

+1

是的,記住你在'%c'之前還需要一個空格 - 它會跳過所有空格字符(包括Enter) – artm

1

要從C中的用戶獲取單個字符,人們使用格式說明符%cgetchar()scanf()。這兩個函數都從標準輸入流中讀取一個字符(它們之間的區別在於getchar()只讀取一個字符,而scanf()可以讀取各種格式)。

但都有同樣的陷阱:當用戶輸入一個字符,然後按下回車鍵。因此輸入流中實際上有兩個字符:輸入的字符和換行符。 如果您不從輸入流中移除換行符,它可能會在程序的後面影響輸入功能。似乎輸入被忽略。

簡單的解決辦法是scanf(" %c", &ch);