标题:求大神指导,putchar和scanf的问题
只看楼主
georgefz
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-6-14
结帖率:66.67%
已结贴  问题点数:20 回复次数:8 
求大神指导,putchar和scanf的问题
#include<stdio.h>
#include<stdlib.h>
  
int jia(int a,int b)
{
return a+b;
}
int jian(int a,int b)
{
return a-b;
}
int cheng(int a,int b)
{   
    return a*b;
}
int chu(int a,int b)
{
    return a/b;
}
int mod(int a,int b)
{
    return a%b;
}

void main()
{
char ch=getchar();
int a,b;
scanf("%d%d",&a,&b);
char ch=getchar();
if(ch=='+')
{
printf("\na+b=%d",jia(a,b));
}
if(ch=='-')
{
printf("\na-b=%d",jian(a,b));
}
if(ch=='*')
{
printf("\na*b=%d",cheng(a,b));
}
if(ch=='/')
{
printf("\na/b=%d",chu(a,b));
}
if(ch=='%')
{
printf("\na%%b=%d",mod(a,b));
}

system("pause");
}


标红的语句位置编译出来结果是对的,标绿的位置是错的,为什么位置变化导致结果不同,求指导!
搜索更多相关主题的帖子: include return cheng 
2016-06-14 12:12
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:11 
绿色的那个地方会错是因为回车被读取了,所以你在绿色的char ch=getchar();这句之前加一句getchar();就没问题了。
scanf是不能读取回车的。而getchar是可以的。
putchar输出的是字符或者字符型变量。

[此贴子已经被作者于2016-6-14 12:21编辑过]

2016-06-14 12:19
georgefz
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-6-14
得分:0 
回复 2楼 linlulu001
我试过了,还是不行
2016-06-14 12:49
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
得分:9 
问题就像二楼说的一样,scanf会把换行符遗留在输入流中。
如果没有红色的只有绿色的,那么你用这种以下格式输入,是没有问题的
1 2+
如果你换行,那么就会有遗留的换行符产生,也可能有别的,这个还得取决于你的输入。

如果你想
1
2
+
的方式输入

最稳妥的做法是在scanf后面加以下语句:
while( getchar() != '\n' );

或者是标准库函数fflush(stdin),但是标准库函数在刷新输入流的时候你不能假定他一定就是清空输入流的,有些实现有效,有些无效。
2016-06-14 15:43
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
得分:0 

#include<stdio.h>
#include < stdlib.h>
int jia(int a,int b)
{
    return a+b;
}
int jian(int a,int b)
{
    return a-b;
}
int cheng(int a,int b)
{
return a*b;
}
int chu(int a,int b)
{
    return a/b;
}
int mod (int a,int b)
{
    return a%b;
}
void main()
{

int a,b;
scanf("%d%d",&a,&b);
char ch=getchar();
if(ch=='+')
{
printf("\na+b=%d",jia(a,b));
}
if(ch=='-')
{
printf("\na-b=%d",jian(a,b));
}
if(ch=='*')
{
printf("\na*b=%d",cheng(a,b));
}
if(ch=='/')
{
printf("\na/b=%d",chu(a,b));
}

if(ch=='%')
{
printf("\na%b=%d",mod(a,b));
}
system ("pause");
}
各种运算结果没有用变量保存,而且return只返回一个值,printf中调用的函数却接收两个值

[此贴子已经被作者于2016-6-14 21:27编辑过]


慢慢调试
2016-06-14 16:43
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
以下是引用georgefz在2016-6-14 12:49:13的发言:

我试过了,还是不行

用我说的改过之后没问题,你是不是那个地方搞错了。
int main()
{

int a,b;
scanf("%d%d",&a,&b);
getchar();
char ch=getchar();
2016-06-14 17:36
hykj9495
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:796
专家分:1441
注 册:2016-6-6
得分:0 
回复 6楼 linlulu001
其实我也是一知半解

慢慢调试
2016-06-14 21:28
georgefz
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-6-14
得分:0 
回复 4楼 随风飘荡
用第二种方式解决了,第一种还是不行,不过大概明白会怎么回事了,谢谢!
2016-06-15 09:29
georgefz
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2016-6-14
得分:0 
回复 6楼 linlulu001
不好意思,我昨天可能搞错了,用你的方法是没有问题的,谢谢!
2016-06-15 09:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-465939-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.089759 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved