c语言(这个问题可能很简单,但是我是真的不明白。)

缘去&勿念 2020-03-30 07:03:37
#include<stdio.h> int main(){ int a,b; int c; char q; printf("请输入两个数字:"); scanf("%d %d ",&a,&b); printf("请输入运算符:"); scanf("%c",&q); if(q=='+') c=a+b ; if(q=='-') c=a-b ; if(q=='*') c=a*b ; if(q=='/'&&b!=0) c=a/b; printf("结果为:%d",c); }我在输出的时候输出完第一句话和输入我要输入的两个数字之后,我只有在输出了一个符号之后,它才会输出第二句话,并且第二句话那个地方无法输入符号并且无法运算。 这是为什么?求大神解答。
...全文
409 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
森格的博 2020-04-09
  • 打赏
  • 举报
回复
输入格式的问题吧
缘去&勿念 2020-04-08
  • 打赏
  • 举报
回复
那啥,叔,我只在第一个%d第一后面加空格了,第二个后面没有加。
abao_abao 2020-04-06
  • 打赏
  • 举报
回复
引用 14 楼 weixin_46537264的回复:
[quote=引用 13 楼 我叫RT的回复:]你可以这样想,在我们编写的程序中会经常用到printf()函数进行数据的输出,而printf()函数要想把内容输出,就要在该函数内部调用有关输出的系统调用,就想你去商店买东西,早上去买包零食,中午去买包泡面,晚上又去买包饼干。那么这一来二去在路上浪费了不少时间,那么何不一次性全买回来呢。同样的,在函数中调用系统调用时,从我们的用户状态切换到内核态也要产生消耗,为了避免这种无意义的消耗我们可以把输出的内容存在一个名为输出缓冲区的地方,当我们需要输出时,一次性全部输出,节省开销。所以我们使用printf()函数时,一般都会写成printf("xxxx \n") ,让数据立刻从输出缓冲区刷新到屏幕。或者使用fflush(stdout)进行强制刷新。 其中,stdout就是标准输出。
懂了,懂了,谢谢大佬[/quote] 小伙子,你这个之所以出现这个现象,就是因为你的scanf里面那两个d%后面跟了空格符,你把它们去掉,程序就正常了,跟别的没关系,自己多动手上机试试
我叫RT 2020-04-05
  • 打赏
  • 举报
回复
printf()函数把你输入的内容放在输出缓冲区中,当输出缓冲区满之后或者主动刷新缓冲区时才会把内容输出到屏幕上。你在printf()中加入一个 \n ,使他每次输出完立刻从缓冲区写入到屏幕就行了。
缘去&勿念 2020-04-05
  • 打赏
  • 举报
回复
引用 13 楼 我叫RT的回复:
你可以这样想,在我们编写的程序中会经常用到printf()函数进行数据的输出,而printf()函数要想把内容输出,就要在该函数内部调用有关输出的系统调用,就想你去商店买东西,早上去买包零食,中午去买包泡面,晚上又去买包饼干。那么这一来二去在路上浪费了不少时间,那么何不一次性全买回来呢。同样的,在函数中调用系统调用时,从我们的用户状态切换到内核态也要产生消耗,为了避免这种无意义的消耗我们可以把输出的内容存在一个名为输出缓冲区的地方,当我们需要输出时,一次性全部输出,节省开销。所以我们使用printf()函数时,一般都会写成printf("xxxx \n") ,让数据立刻从输出缓冲区刷新到屏幕。或者使用fflush(stdout)进行强制刷新。 其中,stdout就是标准输出。
懂了,懂了,谢谢大佬
我叫RT 2020-04-05
  • 打赏
  • 举报
回复
你可以这样想,在我们编写的程序中会经常用到printf()函数进行数据的输出,而printf()函数要想把内容输出,就要在该函数内部调用有关输出的系统调用,就想你去商店买东西,早上去买包零食,中午去买包泡面,晚上又去买包饼干。那么这一来二去在路上浪费了不少时间,那么何不一次性全买回来呢。同样的,在函数中调用系统调用时,从我们的用户状态切换到内核态也要产生消耗,为了避免这种无意义的消耗我们可以把输出的内容存在一个名为输出缓冲区的地方,当我们需要输出时,一次性全部输出,节省开销。所以我们使用printf()函数时,一般都会写成printf("xxxx \n") ,让数据立刻从输出缓冲区刷新到屏幕。或者使用fflush(stdout)进行强制刷新。 其中,stdout就是标准输出。
馒头配咸菜 2020-04-04
  • 打赏
  • 举报
回复
在scanf后面加一个getchar()缓冲一个回车试试
abao_abao 2020-04-04
  • 打赏
  • 举报
回复
scanf双引号里面两个%d紧挨着,啥零碎儿也别加,应该会正常输出的
缘去&勿念 2020-04-04
  • 打赏
  • 举报
回复
说实话,我就一大一新生,你说的我听不懂
缘去&勿念 2020-04-04
  • 打赏
  • 举报
回复
好的,谢谢
A litt hu 2020-04-04
  • 打赏
  • 举报
回复
很简单,楼主怕是忘了回车键也是会产生一个字符(\n)。推荐两种解决问题的办法:第一,把字符输入放前面;第二,在输入数字后加一个清空缓存区fflush(stdin)。
缘去&勿念 2020-04-02
  • 打赏
  • 举报
回复
当然会有啊。
姎楹 2020-04-02
  • 打赏
  • 举报
回复
你输入的两个数字有空格分隔吗
姎楹 2020-04-02
  • 打赏
  • 举报
回复
引用 4 楼 weixin_46537264 的回复:
当然会有啊。
那你试试看scanf("%d %d ",&a,&b);把后面的空格去掉看看
缘去&勿念 2020-04-01
  • 打赏
  • 举报
回复
我就是在回车之后它不会出现第二句话,然后我只有在回车之后加一个运算符再按回车,他才会输出下一句话,并且他不会运算而是直接输出最后一个printf
姎楹 2020-03-31
  • 打赏
  • 举报
回复
你输入两个字符然后回车应该会显示第二句话然后你再输入运算符

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧