在 C 中创建简单计算器时出现问题
Issue while creating a simple calculator in C
我正在用 C 语言创建一个非常基本的计算器,但输出结果不尽如人意。
#include<stdio.h>
int main(int argc, char const *argv[])
{
/* code */
char ch;
int a,b,p=0;
scanf("%d",&a);
while(1)
{
ch=getchar();
if(ch==';')
{
p=2;
break;
}
scanf("%d",&b);
if(ch=='+')
{
a+=b;
}
if(ch=='-')
{
a-=b;
}
if(ch=='*')
{
a*=b;
}
if(ch=='/' && b!=0)
{
a/=b;
}
if(ch=='/' && b==0)
{
printf("INVALID INPUT\n");
p=2;
break;
}
}
if(p!=0)
printf("%d",a);
return 0;
}
输出总是作为分配给“a”的初始值出现。
即将到来的输出-
4
+
5
;
4
预期输出 -
4
+
5
;
9
你能帮我解决这个表达式为什么没有被正确评估的问题吗?
行
scanf("%d",&a);
将使用输入流中的第一个数字,但会在输入流中保留换行符。
因此,当您稍后调用
ch=getchar();
它将读取换行符。它不会读取 +
字符。
如果您想阅读 +
字符,则可以将该行更改为以下内容:
scanf( " %c", &ch );
此行将首先丢弃所有空白字符并匹配输入流中的第一个非空白字符。
之后,您的程序将具有所需的输出:
4
+
5
;
9
另一种解决方案是在每次调用使用 %d
格式说明符的 scanf
后丢弃该行的其余部分。这样,之后立即调用 getchar
应该会按预期读取 +
字符。
您可以使用以下代码丢弃输入行的剩余部分:
//discard remainder of input line
{
int c;
do
{
c = getchar();
} while ( c != EOF && c != '\n' );
}
这里有一个更紧凑的写法:
//discard remainder of input line
for ( int c; (c=getchar()) != EOF && c != '\n'; )
;
唯一的问题是扫描输入。
作为制表符或新行必须分隔提供给 scanf 的值。
简单来说就是在scanf的末尾加上\n
即可。
scanf("%d\n", &a);
scanf("%d\n", &b);
应该这样做。
我正在用 C 语言创建一个非常基本的计算器,但输出结果不尽如人意。
#include<stdio.h>
int main(int argc, char const *argv[])
{
/* code */
char ch;
int a,b,p=0;
scanf("%d",&a);
while(1)
{
ch=getchar();
if(ch==';')
{
p=2;
break;
}
scanf("%d",&b);
if(ch=='+')
{
a+=b;
}
if(ch=='-')
{
a-=b;
}
if(ch=='*')
{
a*=b;
}
if(ch=='/' && b!=0)
{
a/=b;
}
if(ch=='/' && b==0)
{
printf("INVALID INPUT\n");
p=2;
break;
}
}
if(p!=0)
printf("%d",a);
return 0;
}
输出总是作为分配给“a”的初始值出现。
即将到来的输出-
4
+
5
;
4
预期输出 -
4
+
5
;
9
你能帮我解决这个表达式为什么没有被正确评估的问题吗?
行
scanf("%d",&a);
将使用输入流中的第一个数字,但会在输入流中保留换行符。
因此,当您稍后调用
ch=getchar();
它将读取换行符。它不会读取 +
字符。
如果您想阅读 +
字符,则可以将该行更改为以下内容:
scanf( " %c", &ch );
此行将首先丢弃所有空白字符并匹配输入流中的第一个非空白字符。
之后,您的程序将具有所需的输出:
4
+
5
;
9
另一种解决方案是在每次调用使用 %d
格式说明符的 scanf
后丢弃该行的其余部分。这样,之后立即调用 getchar
应该会按预期读取 +
字符。
您可以使用以下代码丢弃输入行的剩余部分:
//discard remainder of input line
{
int c;
do
{
c = getchar();
} while ( c != EOF && c != '\n' );
}
这里有一个更紧凑的写法:
//discard remainder of input line
for ( int c; (c=getchar()) != EOF && c != '\n'; )
;
唯一的问题是扫描输入。
作为制表符或新行必须分隔提供给 scanf 的值。
简单来说就是在scanf的末尾加上\n
即可。
scanf("%d\n", &a);
scanf("%d\n", &b);
应该这样做。