2

我尝试过以下代码,在输入字符之前需要 %d。那是代码中的 after switch 循环。

#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 语句编译器不接受字符输入。所以请给我解决方案。

4

4 回答 4

6

这是因为您必须“吃掉”先前输入的换行符

您不必使用%d.

而是使用:

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

代替

//scanf("%d");

丢弃换行符。

于 2013-08-25T05:09:05.183 回答
2

这是由于插入下一行字符即'\n'而不是以下语句而发生的问题

scanf("%c",&ch);

你应该使用

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

现在会发生什么,首先控制进入新行,然后它将插入或输入字符,只需更改此语句,您会发现您的程序正确执行...

于 2013-08-25T05:34:39.243 回答
1

您必须使用换行符。您可以在 scanf 语句中的 %c 之前添加空格以忽略空格


你应该改变

scanf("%c",&ch);

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

或使用 getchar() 来做到这一点。

c=getchar();

如需更多见解,请提问:
scanf() 函数不起作用?

于 2013-08-25T05:14:41.957 回答
0

另一种告诉scanf消耗或识别空白(并且新行被认为是空白)的方法是编码:

  char ch[2];
  ...
  scanf("%1s", &ch);
  ...
  if (ch[0] == 'x' etc.
于 2013-08-25T06:50:45.713 回答