2014-09-13 71 views
1

我新編程c編程 我寫一個程序。但是當我輸入我的選擇程序之前,我運行程序結束。 以下是截圖。 https://onedrive.live.com/download?resid=E63780628DD96583!3161&authkey=!APl3ReO7T4XIO_s&v=3&ithint=photo,jpg程序結束之前輸入輸入(開關櫃)

#include<stdio.h> 
#include<conio.h> 
main() 
{ 
    char ch; 
    int num1, num2, a, m, s; 
    float d; 
    printf("\nEnter The First Number: "); 
    scanf("%d", &num1); 
    printf("\nEnter The Second Number: "); 
    scanf("%d", &num2); 
    a=num1+num2; 
    m=num1*num2; 
    s=num1-num2; 
    d=(float)(num1/num2); 
    printf("\nEnter Your Choice: "); 
    scanf("%c", &ch); 
    switch(ch) 
     { 
      case 'A': printf("\nThe Addition Of The Number Is= %d", a); 
       break; 
      case 'M': printf("\nThe Multipication Of The Numbers Is= %d", m); 
       break; 
      case 'S': printf("\The Subsraction Of THe Numbers Is= %d", s); 
       break; 
      case 'D': printf("\nThe Division Of The Two Numbers Is= %f", d); 
       break; 
      default : printf("\nInvalid Entry"); 
       break; 
     } 
    getch(); 
    return 0; 
} 

如果我做的錯誤???

+0

不調試你的程序將是第一個錯誤。沒有對['scanf()'](http://en.cppreference.com/w/c/io/fscanf)進行研究以理解它在讀取帶格式的單個'%c'時不*忽略空格空白序言,因此在第二個數字之後消耗你的換行符,而不是你想要的字符將是第二個錯誤。 – WhozCraig 2014-09-13 11:17:16

+1

爲什麼一個純文本輸入和輸出的屏幕截圖?無論如何,你也只是檢查首都。我敢打賭,你不打字大寫鎖定,所以你輸入*小寫*字符。 – usr2564301 2014-09-13 11:56:47

回答

3

scanf%c前添加一個空格就能解決issue.This是因爲scanf你進入後的頭兩個integers.As的數值回車鍵(\n)不消耗\n字符也是性格,它會被scanf("%c",&ch);消耗掉,因此,您的默認情況會被執行。%c之前的空格將會丟棄所有的空格和空格。

+0

謝謝。有用。 但爲什麼? – MaxySpark 2014-09-13 11:17:02

+1

看看這裏:http://en.cppreference.com/w/c/io/fscanf 「格式字符串中的任何單個空格字符消耗輸入中的所有可用連續空格字符」 – 2014-09-14 18:04:00

+0

如果有兩個* * 「\ n」 個**。那麼,我應該在** scanf ***的**「%c」**之前給出雙倍空格嗎? – MaxySpark 2014-09-16 19:41:19