2013-10-27 39 views
0

我有問題。當我聲明'x'整數時,程序正常工作,但是當我刪除'x'時,它顯示出一個奇怪的結果。爲什麼定義'x'int(C)

#include <stdio.h> 
    #include <conio.h> 
    main() 
    { 
     int a,b,x; 
     char ras; 
     printf("Insert a: "); 
     scanf("%d", &a); 
     printf("Insert b: "); 
     scanf("%d", &b); 
     printf("Sum or multuply: (s/m)"); 
     scanf("%s", &ras); 
     if (ras=='s') 
     { 
      printf("Sum is :%d", a+b); 
     } 
     else if (ras=='m') 
     { 
      printf("Multiply is :%d", a*b); 
     } 
     getch(); 
    } 
+2

在聲明「int ** x **'中取走尾隨'**'。 – Leonardo

+3

'scanf(「%s」,&ras);'應該是'scanf(「%c」,&ras);' –

+1

@Leonardo我認爲他使用**作爲強調,這不在他的實際代碼中:) – rightfold

回答

2

你的程序調用不確定的行爲無論哪種方式,因爲scanf存儲兩個字符(輸入的字母加尾0字節),但你給它指向的是隻能包含一個字符變量的指針。

在你的特定實現中,它會發生這樣的情況,如果該變量存在,那麼0字節將簡單地覆蓋x變量。如果它不覆蓋別的東西,導致你的奇怪結果。

要讀取單個字符,您應該使用%c而不是%s

0

這是因爲你的代碼調用了未定義的行爲,顯然它正在做這個「有趣」的事情。

的原因UB是,%s轉換符使scanf()追加一個終止NULL字符超出字符只是掃描,但沒有餘地,所以將其寫入未分配的內存...


改爲使用%c更好的是,完全擺脫scanf()它是邪惡的。改用一個理智的功能,如getchar()