简易计算器器和验证姓名拉一起出问题,运算器单独拉出来可以运行,但是放一起每次第一遍运算的运算符会被吞掉
#include
#include
int main()
{
int count=0;
char x[10];
char name[10]="xiaoming";
while(1)
{
printf("请输入您的姓名:");
scanf("%s",&x);
if (strcmp(x,name)==0){
puts("HELLO");
break;
}
else{
count++;
puts("ERROR");
if (count==3){
printf("错误太多,程序结束!");
return 0;
}
}
}
float m,n;
char op;
while(1)
{
printf("请输入运算符号(+,-,*,/):");
scanf("%c",&op);
printf("请输入第一个数字\n");
scanf("%f",&m);
printf("请输入第二个数字:\n");
scanf("%f",&n);
if(op=='+')
printf("%lf + %lf = %lf\n", m, n, m + n);
else if(op=='-')
printf("%lf - %lf = %lf\n", m, n, m - n);
else if(op=='*')
printf("%lf * %lf = %lf\n", m, n, m* n);
else if(op=='/')
{
if(n==0)
printf("该值不存在!\n");
else
printf("%lf / %lf = %lf\n", m, n, m/n);
}
else{
printf("抱歉,此计算器还没有那么高级!\n");
}
getchar();
}
}
应该是因为scanf读取字符时把前面的scanf丢弃的换行符读入进来而导致出错了,在读取字符前加个循环读走前面scanf()函数获取输入后丢弃的换行符等字符即可。修改如下:
参考链接:
ASCII码对照表-完整ASCII码表-我就查查询
#include <stdio.h>
#include <string.h>
int main()
{
int count=0;
char x[10];
char name[10]="xiaoming";
while(1)
{
printf("请输入您的姓名:");
scanf("%s",x);
while(getchar()!='\n') //读走前面scanf()函数丢弃在缓冲区的换行符,以便下面的scanf()函数顺利读取字符
continue;
if (strcmp(x,name)==0){
puts("HELLO");
break;
}
else{
count++;
puts("ERROR");
if (count==3){
printf("错误太多,程序结束!");
return 0;
}
}
}
float m,n;
char op;
while(1)
{
printf("请输入运算符号(+,-,*,/):");
scanf("%c",&op);
//printf("op=%c,op=%d\n",op,op) ;
//http://ascii.wjccx.com/
printf("请输入第一个数字\n");
scanf("%f",&m);
// printf("m=%f\n",m) ;
printf("请输入第二个数字:\n");
scanf("%f",&n);
// printf("n=%f\n",n) ;
if(op=='+')
printf("%lf + %lf = %lf\n", m, n, m + n);
else if(op=='-')
printf("%lf - %lf = %lf\n", m, n, m - n);
else if(op=='*')
printf("%lf * %lf = %lf\n", m, n, m* n);
else if(op=='/')
{
if(n==0)
printf("该值不存在!\n");
else
printf("%lf / %lf = %lf\n", m, n, m/n);
}
else{
printf("抱歉,此计算器还没有那么高级!\n");
}
getchar();
}
}