2015-09-25 41 views
-4

稍微困惑於從哪裏開始解決此問題。例如,如果我運行該程序,並且當它要求輸入正數時,我會放上「科比」,錯誤信息將顯示4次,「我很抱歉...」等等。每當我輸入一個單詞時,單詞中的字母數量將在c中多次打印錯誤消息。

#include<stdio.h> 

int main(int agrc, char * argv[]) { 
     int sum = 0, num, c; 
     printf("Please enter a positive integer: \n"); 
     scanf_s("%d", &num); 
     scanf_s("%c", &c); 

     do 
     { 
      sum = num; 
      if (num <= 0) { 
       printf("I'm sorry, you must enter an integer greater than zero: \n"); 
       scanf_s("%d", &num); 
       scanf_s("%c", &c); 
      } 

    } while (num <= 0); 

    printf("The positive integer was: %d\n", sum); 

    return 0; 
} 
+0

'main'後面的'{}'在哪裏?你是否看到你的條件在大於'0'的'while'數字將打破循環。 – ameyCU

+2

嘗試調試你的程序,你會發現錯誤! – duDE

+0

這個詞在你的程序中存儲在哪裏? – ameyCU

回答

1

檢查的scanf_s返回值,以確保輸入的操作實際上成功(即,用戶輸入的十進制整數):

num = 0; 
while (num <= 0) 
{ 
    printf("Please enter a positive integer: \n"); 
    if (scanf_s("%d", &num) == 0) 
    { 
    /** 
    * A return value of 0 means the user typed in something 
    * that isn't a decimal integer; clear out the input 
    * stream and try again. 
    */ 
    while (getchar() != '\n') 
     ; // empty loop 
    } 
} 
1

有多種事情錯在你的代碼,喜歡爲什麼%c,以及整數c以及?似乎沒有任何使用或需要他們。您收到多個錯誤消息,因爲scanf%d默認情況下不會「吃」任何非數字字符。

我會親自寫代碼這樣的事情...

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

int * 
int_prompt (char *message, int *number) 
{ 
    printf (message); 
    scanf ("%d", number); 

    while (1) { 
     if (getchar() == '\n') { 
      break; 
     } 
    }; 

    return number; 
} 

int 
main (void) 
{ 
    int num = 0; 
    int sum = 0; 

    int_prompt ("Please enter a positive integer: ", &num); 
    sum = num; 

    while (sum <= 0) { 
     int_prompt ("I'm sorry, you must enter a positive integer: ", &num); 
     sum = num; 
    } 

    printf ("The positive integer was: %d\n", sum); 

    return 0; 
} 

這是假設你打算做什麼sum,否則你就弄死它。

如果您願意,可以用scanf_s代替scanf

相關問題