2017-03-04 100 views
1

我試圖運行這個代碼,這對我來說似乎很好,但最終的結果並沒有多大的說服力。下面的代碼:在C語言中輸入時出現意外的行爲

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned char nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%d %d %s", &nT, &nF, extension); 
    printf("%d %d\n",nT,nF); 
    getch(); 
} 

以下是樣本輸入:

Enter No. of Testcases & Faults 
50 50 code 

下面是輸出:

0 50 

下面是預期的輸出:

50 50 

注:我有限的使用無符號字符和ca不使用unsigned int。

我使用DEVCPP 4.9.9.2。如果有人得到解決方案或爲什麼發生這種情況的原因,請幫助。

+5

未定義行爲指針傳遞到了錯誤的類型和錯誤類型爲'scanf()的'。 – EOF

回答

3

看着你scanf條款。您正在傳遞兩個(指針)unsigned char變量它,卻又宣佈要在您的格式說明(%d符)讀取兩個ints。如果您想閱讀unsigned char,請通過%hhu

當你傳遞&extensionscanf沒有必要使用符號。數組的名稱被轉換爲指向其第一個元素的指針,因此僅傳遞extension就足夠了。

您同時還使用了非常老的IDE(開發 - C++),即不再發展。也許底層的編譯器也是過時的。我建議使用更新的工具,Code::Blocks是積極開發的,相當新手友好並且在某種程度上類似於Dev-C++。

但是,在Windows平臺上,MSVCRT庫不支持%hhu格式說明符,如在此question中所述。 MingGW編譯器依賴於此實現,所以它在Windows上也不支持%hhuCygwin是一個在Windows上模擬Linux環境的項目,並且使用它自己的C庫版本進行分發,該庫支持%hhu等。作爲旁註,您可以將Code :: Blocks配置爲與Cygwin一起使用(如here所述)。我不知道Dev-C++是否可以實現同樣的功能。

+0

使用%hhu的結果與以前相同。問題是編譯器我想。你說什麼? @lukeg –

+0

@Ankit確保你的編譯器版本支持%hhu格式說明符。我建議嘗試一個新的或試圖切換到C99模式。但是,因爲您在Windows上,您可能會遇到另一個兼容性問題,請參閱此問題以獲取詳細信息:http://stackoverflow.com/questions/15825254/why-is-scanfhhu-char-overwriting-other-variables-when-they - 本地 – lukeg

+0

我看到了這個問題,我面臨同樣的問題。當我將nT和nF聲明爲全局變量時,輸出如預期的那樣,但問題在於將它們聲明爲局部變量。這是我想的一個特定於Windows的問題。無論如何感謝信息:) @lukeg –

0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned int nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%d %d %s", &nT, &nF, extension); 
    printf("%d %d\n",nT,nF); 
    getch(); 
} 
+0

謝謝你回答@dipika,但我有限使用無符號字符,不能使用int –

+0

'%u'是'unsigned int'格式說明符,而不是'%d'。 – lukeg

0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    unsigned char nT,nF;  
    char extension[5]; 

    puts("Enter No. of Testcases & Faults"); 
    scanf("%hhu %hhu %s", &nT, &nF, extension); 
    printf("%hhu %hhu\n",nT,nF); 
    // getch(); 
} 

你可以看到下面的輸出圖像上

enter image description here

+0

此代碼是否適用於上述輸入的計算機? –

+0

如果您在Windows平臺上測試此代碼,因爲我正在使用Windows,那將會很不錯:) –

+0

平臺上可能沒有問題。你可以編譯並運行它。請upvote回答。 –

相關問題