c语言教程代码如下,为什么输入数中含有一个一个0之后 最终结果就变成-1#IND0

哪位C语言高手帮我看下题目是: 写一个简单的计算机器,做二元运算+ - * /和%运算,我所编写的代码如下_百度知道
哪位C语言高手帮我看下题目是: 写一个简单的计算机器,做二元运算+ - * /和%运算,我所编写的代码如下
; }这行代码编译可以通过并生成EXE文件;= %lf\)
case 'n\%&#39,运算完成后可以让用户选择输入y或者Y;nbei chu shu bu neng wei 0,number1 /
printf(&);-'
scanf(&\
if(answer == 'nPlease input nbei chu shu bu neng wei 0;nPlease in)!&#92:#include &lt,(long)number1 % (long)number2);;)
goto there:
if(number2 == 0)
printf(&quot.0;
else if(answer == ');
case '
break: 写一个简单的计算机器;n&&#47:\;we will end the programe&;&#92!\n&#92,number1 * number2);n&,&);= %lf\%lf %c %lf&n&n\n&
n&quot,&number2);
printf(&quot,做二元运算+ - * /+&#39,&number1; char answer = 0;
case ' double number2 = 0; scanf(&n&n&quot: printf(&n&quot哪位C语言高手帮我看下题目是;n'\%c& || answer == &#39,&answer).0;; &#92:
printf(&= %lf&#92,但是运行的时候并没有按照我原先的意图运行起来;);;;N&#39:
if((long)number2 == 0)
printf(&quot,number1 + number2);n&n\
case ' number2);
= %ld\y' char operation = 0;;'= %lf&#92,press Yy or Nn;Y'n &quot!\int main(void){ double number1 = 0:
return 0;nwe will cont;),以重复执行前面的运算;和%运算:&; || answer == '&#92:
printf(&quot,输入N或者n结束程序我所编写的代码如下; switch(operation) {
case &#39,number1 - number2);*&#39:\);stdio.h&&#92
能不能详细说下代码出错的原因,也就是计算机执行的详细过程小弟不甚感激!
提问者采纳
那再这个时候你来一句scanf(&quot,&answer),那么我们想想,所以即不是Y也不是N:1+1之后;,你的程序目前出现的现象是运算执行了一次之后在打印出we will continue to the programe,我们是不是要输入一个“回车”;就是专门用来接收“回车”这个字符的,press Yy or Nn之后就停止了,我们只需要在scanf(&前面加上一句getchar(),程序就直接终止了,也没有给出任何的提示,也就不会有任何的提示,也就是answer没有输入正确;自然这时的answer就存入和“回车”这个字符,&answer),在你输入了数据如;%c&quot,这个回车并没有有任何的变量接收它;%c&quot这个问题是大家经常忽略的一个问题。这个getchar(),要解决这个问题很简单;就可以了;
提问者评价
兄弟,谢谢啦
其他类似问题
二元运算的相关知识
其他5条回答
nwe will end the programePress any key to continue
printf(&nwe will continue to the programe:yPlease input the jisuan shuju:2 + 3= 5:&;):1 + 2= 3,press Yy or NnPlease in%c&quot,&answer);
加个 getchar(),press Yy or Nn.000000we will cont getchar();\ scanf(&quot.000000we will continue to the programe,press Yy or Nn
在“scanf(&%c&,&answer);“之前加入一行fflush(stdin);清空输入缓存流。
#include &stdio.h&int main(void){ double number1 = 0.0; double number2 = 0.0; char operation = 0; char answer = 0; while(1) {
printf(&\nPlease input the jisuan shuju:\n&);
scanf(&%lf %c %lf&,&number1,&operation,&number2);
switch(operation)
case '+':
printf(&= %lf\n&,number1 + number2);
case '-':
printf(&= %lf\n&,number1 - number2);
case '*':
printf(&= %lf\n&,number1 * number2);
case '/':
if(number2 == 0)
printf(&\n\nbei chu shu bu neng wei 0!\n&);
printf(&= %lf\n&,number1 / number2);
case '%':
if((long)number2 == 0)
printf(&\n\nbei chu shu bu neng wei 0!\n &);
printf(&= %ld\n&,(long)number1 % (long)number2);
printf(&\n\ninvalid shuju!\n&);
printf(&\n\nPlease input the shuju once again:\n&);
printf(&\nwe will continue to the programe,press Yy or Nn:&);//
fflush(stdin); 和下面的getchar()功能一样
getchar();
scanf(&%c&,&answer);
if(answer == 'Y' || answer == 'y')
else if(answer == 'N' || answer == 'n')
printf(&we will end the programe&);
return 0;}
把这句代码:scanf(&%c&,&answer);写两遍。问题就解决了。因为第一遍自动读入了“\n”程序就自动退出了。执行代码第二遍时,才能读入你输入的y/n指令;
你好,我也是软件编程初学者,我按照你的意思编了代码,并且可以运行,你可以试试#include&stdio.h&#include&conio.h&void main(){ int a,b;
//定义两个整形变量,a,b是用户输入的数字,可以不赋值 char c,d;
//定义两个字符,c是运算符,可以不赋值 for(int n=1;;n++)
//使用循环 {
printf(&请输入一个简单的四则运算算式:&);
scanf(&%d%c%d&,&a,&c,&b);
case '+' :printf(&%d+%d=%d\n&,a,b,a+b);
case '-' :printf(&%d-%d=%d\n&,a,b,a-b);
case '*' :printf(&%d*%d=%d\n&,a,b,a*b);
case '/' :printf(&%d/%d=%d\n&,a,b,a/b);
case '%' :printf(&%d/%d的余数是:%d\n&,a,b,a%d);;
printf(&是否继续?&);
scanf(& %c&,&d);
if(d=='y'||d=='Y')
else if(d=='n'||d=='N')
printf(&输入有误!\n&);
if(d=='n'||d=='N')
} getchar();}你可以看看与你的代码有哪些区别。我qq:,需要的话可以交流交流。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求C语言大神指点,我想编一个判断素数(质数)的程序,运行倒是能运行,但输入2以上的数字就不显示结果_百度知道
求C语言大神指点,我想编一个判断素数(质数)的程序,运行倒是能运行,但输入2以上的数字就不显示结果
&&nbsp,但输入2以上的数字就不显示结果不知道是怎么了程序代码如下&&&&/zhidao/wh%3D450%2C600/sign=017acdc79d510fbec03e4a3/5fdf8db1cb6b1a554eac2;Is&nbsp,&&&Is&&&&&&&&&prime&&&2)&&&&&;prime&prime&&);}&&&&&&if(n==2)&&&printf(&&i=i+1;&&&&&&&nbsp.&&&}<img class="ikqb_img" src="&else&&&&&&&&&&&&0;&&&&&Not&&&nbsp.\n&printf(&quot,i;&&/zhidao/pic/item/5fdf8db1cb6b1a554eac2;&a&&&&&&&&&&&Not&&&&&=n)&&&&&&&&&&main(){&&enter&please&&nbsp.\n&&&i=2;&&&&&&nbsp求C语言大神指点;&&&&&&&&&&&&&&printf(&&if(a==0)&printf(&n\n&&&&&&&integer&nbsp,运行倒是能运行;&&&&);&a=n%i;&&&scanf(&&&&&&&&nbsp.\n&&nbsp.\n&&);&&&printf(&&&&&&a&&&&&&&&&&nbsp,我想编一个判断素数(质数)的程序;&&nbsp
提问者采纳
&return&&if(n&&&2;n_srqt&&=&isPrime(int&&&&&&2)&&nbsp。另外用goto也不好理解;return&{&&&&&&&nbsp,&if(n%i==0)&}&i++)&i&&=n_&int&&i;&nbsp,还是用循环好点;&&return&sqrt(n);return&nbsp:bool&=&if(n==2)&&nbsp。下面写了点代码;&for(i&&&nbspelse后面用大括号括起来;&nbsp,不然只执行i=1这一句;&&n){&nbsp
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
按默认排序
其他2条回答
真的 尽量不要用goto
{这对大括号不用用的 删了试试
判断素数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言,将字符串变成逆序字符串输出,为何运行时输入字符串后打空格无效啊?求大神啊啊啊啊啊1!!_百度知道
C语言,将字符串变成逆序字符串输出,为何运行时输入字符串后打空格无效啊?求大神啊啊啊啊啊1!!
h&&#92; }while(str[i];); printf(& for(i=0; for(i=0;i++) {
printf(& } printf(& } return 0,m;
str[n]=str[i];=n:#include&
i++;i++:&);i& do {
scanf(&;2;;n&#39代码如下;逆序输出字符串为;i&lt:&quot,&str[i]),str[i]);%c&quot,n--) {
m=str[n],n=0;int main(){ char str[100];=n&#47;);%c&
n++; int i=0;请输入一个字符串;
str[i]=m!=&#39
提问者采纳
i变成了后面一个了。第10行i++后你应该说的是回车吧,一直是空了
提问者评价
谢谢你帮我大忙了
其他类似问题
m=str[n-i],改成如下试试;2;i&
str[i]=m:for(i=0,所以结果不对;
str[n-i]=str[i];=n&#47你在逆置操作循环里面把n改了
按默认排序
其他2条回答
getline(cin,建议使用getline。参考格式,这样可以规避空格结束问题,具体的自己debug一下看看,但是要注意getline容易把回车也读了;n都会停止读入cin和scanf遇到空格或&#92
因为空格在输入时是不会包含在字符串中的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁自学C语言15天-第一个作品批量姓名生成器 请多多指教
[问题点数:20分,结帖人a]
自学C语言15天-第一个作品批量姓名生成器 请多多指教
[问题点数:20分,结帖人a]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。linux下C语言编程,管道,dup,fork,疑问的是,为什么连用那么多close?必须要close? 代码如下_百度知道
linux下C语言编程,管道,dup,fork,疑问的是,为什么连用那么多close?必须要close? 代码如下
#include&unistd.h&#include&stdlib.h&#include&stdio.h&int main(){int fda[2];if(pipe(fda)==-1){fprintf(stderr,&error creating pipe&#92;n&);exit(1);}switch(fork()){case -1:fprintf(stderr,&error forking child&#92;n&);exit(1);case 0:close(1);dup(fda[1]);订耿斥际俪宦筹为船力close(fda[1]);close(fda[0]);execlp(&ls&,&ls&,0);fprintf(stderr,&error trying to exec ls&#92;n&);exit(1);default:close(0);dup(fda[0]);close(fda[0]);close(fda[1]);execlp(&wc&,&wc&,&-w&,0);fprintf(stderr,&error trying to exec wc&#92;n&);exit(1);}}
提问者采纳
文件描述符0,1,2分别表示标准输入标准输出,标准错误输出, 所以在子进程里close(1订耿斥际俪宦筹为船力)是关闭了标准输出, 然后用dup(fda[1]);此时未用的最小文件描述符就是1(被关闭);这里关闭fda[0]就是为了说明在子进程是管道的写端(fda[0],不关闭是可以的为了保险起见关闭).然后子进程退出会调用系统程序ls,于是当前的文件目录就被发送到管道中.父进程同理, 就是将标准输出作为管道的读端,它读到的是子进程ls后的内容,对文件计数,
第一,你说的浴室当前的文件目录,是子进程运行ls文件时候,ls的文件目录吗?第二,fda[0]和fda[1]的读写任务是已经分配好了的吗?默认fda[0]就是读,fda[1]就是写吗?第三,管道fda[0]中是什么内容?管道fda[1]中是什么内容?虽然看了很多资料,但是这些问题一直不明白,求教。
第一个就是执行文件的文件目录,就是当你:q以后出来的这个目录下运行ls终端输出的结果.管道两端可分别用描述字fda[0]以及fda[1]来描述,需要注意的是,管道的两端是固定了任务的。即一端只能用于读,由描述字fda[0]表示,称其为管道读端;另一端则只能用于写,由描述字fda[1]来表示,称其为管道写端这是固定的。可以把fda[0],fda[1]看做是一个文件,管道就是内核里一块大家都看得见的区域的文件描述符, 就像我们小时候传字条, 一个写,一个看,里面的内容是一样的.不过管道是读的人如果要读就要一直等,等到有人往里面写数据, 当对方写完以后他就开始读, 读完了管道里是没有东西了.有本书挺好《UNIX环境系统编程》一版是黑色封面二版的封面有个小漫画,尤晋元译的,你扫描几遍挺好的.
谢谢你的耐心回答。
提问者评价
其他类似问题
首先,说一下dup函数的作用:该函数可以复制一个描述符,传递给该函数一个既有的描述符,它就会返回一个新的描述符,且这个描述符是当前系统中最小且未使用的描述符(为一个整数)。然后,就是程序的执行了。进程首先创建了一个管道fda[]订耿斥际俪宦筹为船力,然后创建了一个子进程。在子进程中,首先关闭了标准输出流close(1);然后调用dup函数将描述符1也指向前面创建的管道的读端口,即描述符“1”指向管道的读出口,最后关闭了管道的写端口和读端口(这只是在子进程中,主进程中并没有关闭),然后调用execlp函数,创建新的进程“ls”取代现有子进程。在父进程中,首先关闭了标注输入流,然后调用dup函数将管道的写端口映射到0描述符,然后关闭管道的写入、读出端口,最后调用execlp创建新进程替换父进程。整个程序执行之后的结果是:将管道的写入端口用标准输入描述符0表示,将管道的读出端口用标准输出描述符1表示。但是具体为什么要这么做,受知识限制,还不知道,呵呵
c语言编程的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言视频教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信