scanf整数变量之间的scanf char变量不';不行?

scanf整数变量之间的scanf char变量不';不行?,c,char,int,scanf,C,Char,Int,Scanf,我想做一个计算器,只是一个简单的带循环和基本运算的计算器,但奇怪的是,在我的数字scanf之间的scanf字符被忽略了。如果我把它放在整数的scanf上,它就可以工作了,但它看起来不像计算器。有没有办法解决这个问题?它还没有完成;这里有个错误,所以想知道出了什么问题 #include <stdio.h> #include <stdlib.h> int main(){ int number1,number2,total; char a; print

我想做一个计算器,只是一个简单的带循环和基本运算的计算器,但奇怪的是,在我的数字
scanf
之间的
scanf
字符被忽略了。如果我把它放在整数的
scanf
上,它就可以工作了,但它看起来不像计算器。有没有办法解决这个问题?它还没有完成;这里有个错误,所以想知道出了什么问题

#include <stdio.h>
#include <stdlib.h>

int main(){
    int number1,number2,total;
    char a;
    printf("This is your personal calculator:(End with ""="")\n");

    scanf("%d",&number1);
    scanf("%c",&a);
    scanf("%d",&number2);

    if (a == 'x' || a == 'X' || a == '*'){
        total=number1*number2;
        printf("%d",total);
    } else if (a == '/'){
        total=number1/number2;
        printf("%d",total);
    } else if (a == '+'){
        total=number1+number2;
        printf("%d",total);
    } else if (a == '-'){
        total=number1-number2;
        printf("%d",total);
    } else {
        printf("error");
    }

    system("pause");
    return 0;
}
#包括
#包括
int main(){
整数1,整数2,总计;
字符a;
printf(“这是您的个人计算器:(以“=”结尾)\n”);
scanf(“%d”和编号1);
scanf(“%c”和“&a”);
scanf(“%d”和编号2);
如果(a='x'| | a='x'| | a=='*')){
总数=1号*2号;
printf(“%d”,总计);
}else如果(a=='/')){
总数=1号/2号;
printf(“%d”,总计);
}else如果(a=='+')){
总数=1号+2号;
printf(“%d”,总计);
}else如果(a='-'){
总数=数字1-2;
printf(“%d”,总计);
}否则{
printf(“错误”);
}
系统(“暂停”);
返回0;
}

问题是因为
scanf
留下的换行字符
\n
。这可以通过在格式说明符
%c
之前放置空格来避免

试试这个

scanf(" %c", &a);  
       ^ An space  

这将帮助您吃光第一次
scanf
留下的
\n
字符。您应该测试每次都从
scanf()
中获得一个值

<代码> %c>代码>字符读取第一个数字之后的空白或换行;在读取字符之前,使用带前导空格的

“%c”
跳过可选的空白

if (scanf("%d", &number1) == 1 &&
    scanf(" %c", &a) == 1 &&
    scanf("%d", &number2) == 1)
{
    ...process possibly valid input...
}
else
{
    ...diagnostics...
}
如果您使用
fgets()
阅读整行代码,并使用
sscanf()
解析它们,则可能更容易进行良好的诊断

  • 建议1:举例说明输入内容和输出内容。这使得人们更容易帮助您(他们可以判断程序是否为他们生成相同的输出)
  • 建议2:回显您的输入,以便查看程序得到了什么。这允许您判断程序是否获得了预期的输入。例如,您可能会发现
    number2
    没有包含您期望的内容
  • 建议3:将
    number1
    number2
    初始化为
    -1
    ,以便查看
    scanf()
    失败的时间(因为您尚未检查
    scanf()
    是否成功)

}

您好,谢谢。它解决了问题。。直到现在我才知道。谢谢你的欢迎。我很高兴它帮助了你:)你必须展示你是如何输入数字的。我相信,如果您在一行中输入所有内容而不带空格,例如
12+34
,您的计算器将运行良好。但是,如果你在单独的一行中输入所有内容,那就不同了。您必须在问题中包含如此重要的细节。您还不清楚为什么要告诉用户“结束于”。用户应在何处、何时以及如何输入“=”?将
fflush
应用于
stdin
是非法的<代码>fflush
仅适用于输出流。因此,这不仅不是一种“简单的刷新方式”,实际上是一个重大错误。@AndreyT:请注意,在某些系统上,定义了
fflush(stdin)
,特别是在Windows和Linux上(请参阅),在其他一些基于Unix的系统上也是如此。它不是根据C标准或POSIX定义的行为,但系统确实定义了它。
int main()

{

int number1,number2,total;
char a;
printf("This is your personal calculator:(End with ""="")\n");

scanf("%d",&number1);

fflush(stdin); // SIMPLE WAY FLUSH THE INPUT STREAM, INPUT BUFFER IS USUALLY CLEARED.
scanf("%c",&a);

scanf("%d",&number2);

if (a == 'x' || a == 'X' || a == '*'){
    total=number1*number2;
    printf("%d",total);
} else if (a == '/'){
    total=number1/number2;
    printf("%d",total);
} else if (a == '+'){
    total=number1+number2;
    printf("%d",total);
} else if (a == '-'){
    total=number1-number2;
    printf("%d",total);
} else {
    printf("error");
}

system("pause");
return 0;