2015-10-20 40 views
-2

我寫在C簡單的測驗(使用代碼塊13.12)爲什麼如果C不使用char

它編譯,但在第二個問題不起作用工作程序。無論我將輸入什麼,它總是給出答案'那是難過的'。 我不明白什麼是錯的。 我來到這裏,如果我評論第13行(scanf(「%d」,&年齡);)它開始工作正常的第二個問題。 問題是什麼?

#include <iostream> 
#include <stdio.h> 
#include <windows.h> 
#include <clocale> 


int main() 
{ 

int age; 
char S1; 

printf("How old is your dog? \n"); 
scanf("%d", &age); 

if (age <= 7) 
    { 
     printf(" very young. the end \n"); 
     return 0; 
    } 
else 
    { 
     printf("old dog. \n \n"); 
    } 

//question2 

printf("Do you like dogs? y/n \n"); 
scanf("%c%c", &S1); 

if (S1 == 'y') 
    { 
     printf("hey, that's nice \n"); 
    } 
else 
    { 
     printf(" that's sad :(. \n"); 
     return 0; 
    } 
return 0; 
} 
+0

你的第二個scanf? – Magisch

+1

爲什麼''和''?不要混用C和C++。爲什麼''? Urgh。 – Downvoter

+0

對不起,我做了很多修改,並沒有注意到要刪除它。我的壞 – Andrew

回答

2

更改第二scanf()

scanf(" %c", &S1); 

這將難逃輸入緩衝區的冷落換行符\n

另外,你正在閱讀一個char在這。所以,你只需要一個%c

+0

我刪除%c並編譯。但是當我運行程序時,首先問問題,當我回答7時,回答第二個問題,自動編寫回答'很傷心'並結束程序。 – Andrew

+0

@Andrew注意'%c'之前的空格。你添加了嗎? – Haris

+0

在我的上帝,就是這樣!它永遠不會發生在我身上。非常感謝你! – Andrew

4

您可以通過

scanf("%c%c", &S1); 

scanf導致未定義的行爲讀 char S,一個存儲在S1,一個保存在棧上的某個位置,因爲scanf需要一個第二提供char*

如果你的目的是要忽略之後的實際字符換行符,你爲什麼要使用2個「%C」在寫

scanf("%c%*c", &S1); 
0
scanf("%c", &S1); 

是正確的方式來輸入一個字符,

+0

它應該是%c之前的空格。像這樣的scanf(「%c」,&S1); – Andrew

相關問題