2016-01-21 56 views
-3

給定一個整數變量名爲yesCount和命名NOCOUNT另一個int變量,命名爲響應一個char變量,寫入必要的代碼來讀取一個值到響應,然後執行下列操作:內容是不正確

  • 如果鍵入的字符是一個yY然後遞增yesCount並打印出"YES WAS RECORDED"
  • 如果在輸入的字符是一個nN然後遞增noCount並打印出"NO WAS RECORDED"
  • 如果輸入無效,只需打印消息"INVALID"並且別無其他。

你好,我遇到了這個問題的C代碼的麻煩。我得到不正確的輸出。任何援助非常感謝。謝謝。

if (response == 'y' || response == 'Y') { 
    scanf("%d", &yesCount); 
    yesCount++; 
    printf("YES WAS RECORDED"); 
} 

if (response == 'n' || response == 'N') { 
    scanf("%d", &noCount); 
    noCount++; 
    printf("NO WAS RECORDED"); 
} else { 
    printf("INVALID"); 
} 
+1

你在哪裏獲得'response'的值? – lurker

+1

使用開關對你的代碼來說真的很有效 –

+3

你爲什麼要爲'yesCount'和'noCount'調用'scanf'?你如何閱讀'響應'? –

回答

1

這裏可能會有一些錯字,因爲我是從智能手機上寫的。請注意這一點。這裏的路,我會怎麼做:

#include <stdio.h> 

int main(void) { 

    int yescount = 0, nocount = 0; 
    int c; 

    while ((c = getchar) != EOF) { 
     switch (c) { 
      case 'y': 
      case 'Y': 
      puts("Yes registered"); 
      yescount++; 
      break; 

      case 'n': 
      case 'N': 
      puts("No registered"); 
      nocount++; 
      break; 

      default: 
      puts("Invalid selection."); 
      break; 
     } 
    } 
    return 0; 
} 
1

你應該學會如何正確地展示你的代碼:它可以幫助很多具有可讀性,使許多錯誤更加明顯。

有問題的代碼:

  • 你叫scanf爲沒有目的,但請你不要讀取響應。
  • 您在第一個if的正文末尾忘記了else。結果是如果響應是yY,則採取最後的else分支。
  • 您應該在每條消息後打印一個\n,以便它與後續輸出分離。

這裏是一個修正版本:

scanf("%c", &response); 
if (response == 'y' || response == 'Y') { 
    yesCount++; 
    printf("YES WAS RECORDED\n"); 
} else 
if (response == 'n' || response == 'N') { 
    noCount++; 
    printf("NO WAS RECORDED\n"); 
} else { 
    printf("INVALID\n"); 
} 

從您的意見,他們希望你能使用scanf("%c", &response);閱讀charresponse,而不是簡單的方式從stdin讀一個字節。

+0

程式碼實驗室分析:邏輯錯誤(S) 更多提示: ⇒你幾乎肯定要使用: ⇒你幾乎肯定要使用:,(逗號) ⇒你幾乎肯定要使用:scanf函數 檢測到的問題: ⇒標準輸出的內容不正確。 ⇒noCount的值不正確。 ⇒響應值不正確。 ⇒yesCount的值不正確。 ⇒更多信息:查看測試案例表 這就是我提交問題時得到的結果 – user44775

+0

我更新了答案。目前還不清楚你是否應該寫一段代碼或一個可編譯的函數。如果yesCount和noCount被賦予*,則應該按照指示更改它們,但嘗試'yesCount = noCount = 0;'來檢查它們是否希望將它們初始化爲0。 – chqrlie

+0

謝謝你的幫助! – user44775