管道就是把前一个程序的输出作为参数传给后一个程序,这里统计程序输出的内容就是”工资总和+逗号+人数“,而求平均值程序接收输入时就是按照顺序来判断的,逗号左边就被识别为工资总和,逗号右边就被识别为人数了。
可否附上完整代码,我这边运行了一下你的代码,是可以跳出循环的,推测可能是版本问题
标准答案是4个,华为编程规范也是4个,慕课网的c讲师都说也是4个,所以就按4个来
你 sum 的输出个是和avg的输入要求不匹配。
avg 要求输入的格式是 "%d,%d" ,即 2个整数,并且用 逗号隔开。
但是你 sum 的输出格式是 :"s is value %d , geshu is value %d",即你的输出是: s is value 3, geshu is value 1, 这种,和avg的输入要求不匹配。
个人理解:
重定向(>> 或 > 或 <) 的作用是将内容输出到文件或者将文件输入到程序
比如之前课程将数据输出到某个txt文件中,或者通过输入重定向(<)将txt文件的内容输入到程序中。
管道(|)是将程序和程序之间形成“链接”,
比如课程中的计算input.c与avg.c通过管道链接,实现统计平均数的功能,如下图:
同样,在Linux命令操作中许多操作也是如此,比如:ls /usr/ | grep mysql 命令,利用管道将ls和grep这两个工具(应用)连接起来。
兄弟你不贴源代码,别人怎么知道?
所有代码发出来看看啊
break没有放在if判断语句里面,所以无论输入的值是什么break都会执行,跳出while循环
这个avg.out里输入的两个数一个是和,一个是个数,所以平均数是总和除以个数,即第一个数除以第二个数。而input.out是计算所有输入数的总和和个数,通过管道把值传给avg.out.
可以从windows系统盘或其他磁盘划出一部分空间装个双系统,要么直接装个虚拟机最省事。
已自行解决,scanf(“%d”,&i);多加了一个换行符
好了,原来就个逗号的问题
输入和输出的代码要相对应,也就是printf(%d,%d),scanf(%d,%d),这样的
老师你还有相关课程没,感觉讲的很好,很受用
用心点
!!!
没有加"," 输出就是6003,这个变成avg中的输入是会被看成是一个数
加一个%s,只接收不使用
第一个程序的结果通过 管道 作为 输入流 输入到程序第二个程序里
是不是除了0啊。。贴代码看看啊。。
是我自己没理解好占位的意思,没注意到输入的时候也是逗号分开的
............
./gongzi.out | ./average.out 这样 你好打反了
还有你在 gongzi.c 中建议你不要给 i 上来就赋值为0,这要会导致算到 IF 就会直接退出了!
设计就是这样吧,如果输入流是一个文档的话,你的 <*.txt命令不是也能在屏幕上看见嘛。你看linux下输入密码的时候就不显示,不同的设计,没有为什么吧~
cc.b.c输出的应该是a.out,-o后面跟的文件名意思是给编译的结果重新起一个名字。而后面那个问题,由于管道的作用是把前面程序执行的结果输入后面的程序中,所以不仅要看两个程序的正确性,还要看二者的关联。
应该是输入的次数已经保存到了变量n中,s取的是第二个代码块中的值,所以就直接计算中来结果了
while循环里面少了一句 scanf("%d",&i);
管道的作用就是将数据导入到目标文件