2013-08-25 88 views
2

我已經嘗試了下面的代碼,在輸入字符前需要%d。這是代碼中的切換循環之後。爲什麼%d在輸入字符前需要?

#include<stdio.h> 
#include<conio.h> 
void sum(); 
void mul(); 
void main() 
{ 
char ch; 
int c; 
clrscr(); 
do 
{ 
    printf("\n\n Enetr choice "); 
    printf("\n\n\t 1: SUM \n\n\t 2: MUL"); 
    scanf("\n\n\t %d",&c); 
    switch(c) 
    { 
     case 1: 
      sum(); 
      break; 
     case 2: 
      mul(); 
      break; 
     default: 
      printf("\n\n hhhh..... "); 
    } 
    printf("\n\n Want u calcualte again"); 
    //scanf("%d"); 
    scanf("%c",&ch); 
    printf("\n ch value is %c",ch); 
}while(ch=='y'|| ch=='Y'); 
getch(); 
} 
void sum() 
{ 
int s; 
s=10+50; 
printf(" SUM: %d",s); 
} 
void mul() 
{ 
int s; 
s=10*50; 
printf(" SUM: %d",s); 
} 

在這段代碼在開關後,我試圖輸入字符,但沒有在註釋中的scanf語句是需要輸入字符。沒有那個scanf語句編譯器不需要字符輸入。所以請給我解決方案。

+2

要吸收新行 –

+1

我認爲這可能是閱讀的換行符。 – DaoWen

+0

http://stackoverflow.com/questions/8464620/program-doesnt-wait-for-user-input-with-scanfc-yn –

回答

2

這是發生由於下一行字符的插入的就是「\ n」,而不是下面的語句

scanf("%c",&ch); 

問題你應該使用

scanf("\n%c",&ch); 

現在會發生什麼第一次控制轉到新行,然後它會插入或輸入字符,只是改變這種說法,你會發現你的程序執行正常...

+0

scanf格式字符串中的空白字符不像您認爲的那樣行爲。 – mlp

6

它,因爲你必須從先前的輸入

「吃了」新行不必使用%d

而是使用:

while((c = getchar()) != '\n' && c != EOF) ;

代替

//scanf("%d");

丟棄的換行符。

1

你都需要消耗新行字符。 您可以在scanf函數語句添加%C之前的空間忽略空白


你應該改變

scanf("%c",&ch); 

scanf(" %c",&ch);//this makes scanf ignore white spaces like new line, space etc. 

或使用的getchar()來做到這一點。

c=getchar(); 

要了解更多詳情請訪問問題:
scanf() function doesn't work?

0

另一種方法,告知scanf消耗或識別空白(和一個新行被認爲是白色空間)是代碼:

char ch[2]; 
    ... 
    scanf("%1s", &ch); 
    ... 
    if (ch[0] == 'x' etc. 
相關問題