文件指针问题

saishow 2010-09-07 05:44:16
题目内容:
编写一个程序,他不读取任何命令行参数 或者 读取一个命令行参数. 如果有一个参数, 程序将它作为一个文件输入名.如果没有参数,使用标准输入(stdin)作为输入.假设输入完全由浮点数组成.让程序计算并报告输入数字的算术平均值.

下面是书上给的答案代码


#include <stdio.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
FILE *fp;
double n,sum = 0.0;
int ct = 0;
if (argc == 1)
fp == stdin;//这句是什么意思?
else if(argc == 2)
{
if ((fp = fopen(argv[1],"r")) == NULL)
{
printf("can't open %s\n",argv[1]);
exit(EXIT_FAILURE);
}
}
else
{
fprintf(stderr,"Usage %s [filename]\n",argv[0]);
exit(EXIT_FAILURE);
}

while((fscanf(fp,"%lf",&n)) == 1)
//假设 此时argc = 1,没有参数 fp里面什么也没有.程序运行到这里出错.应该怎么改?
{
sum += n;
++ct;
}

if (ct > 0)
printf("Average of %d valuse = %f\n",ct,sum/ct);
else
printf("No valid data.\n");
return 0;
}
...全文
119 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
haoxihuan 2010-09-10
  • 打赏
  • 举报
回复
给个补充:TC中默认是打开5个指针。分别是stdin,stdout,stderr,stdaut,stdprn.其他编译器可能是3个。
haoxihuan 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 canshui 的回复:]
引用 8 楼 saishow 的回复:
fp = stdin; 之后

fp发生了那些变化呢?还请指点指点.

在我们开一个程序时,系统就自动打开三个指针
stdin 标准输入stdout 标准输出 stderr 标准错误
举个例子、

C/C++ code

#include <stdio.h>
void main()
{
FILE *fp ;
int ……
[/Quote]
其实是5个指针 stdaux,stdprn
canshui 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 saishow 的回复:]
fp = stdin; 之后

fp发生了那些变化呢?还请指点指点.
[/Quote]
在我们开一个程序时,系统就自动打开三个指针
stdin 标准输入stdout 标准输出 stderr 标准错误
举个例子、
#include <stdio.h>
void main()
{
FILE *fp ;
int x ;
fp=stdin ; //fp 指向标准输入
fscanf(fp, "%d", &x) ; //等价于 scanf() 的使用
fp=stdout ; //fp 指向标准输出
fprintf(fp, "%d", x) ; //等价于 printf() 的使用
fclose(fp) ;
}
saishow 2010-09-07
  • 打赏
  • 举报
回复
fp = stdin; 之后

fp发生了那些变化呢?还请指点指点.
saishow 2010-09-07
  • 打赏
  • 举报
回复
果然抄错了.多写了个=号. 汗一身.
qf17331733 2010-09-07
  • 打赏
  • 举报
回复
if (argc == 1)
fp == stdin; //改这里就可以了~
else if(argc == 2)
selooloo 2010-09-07
  • 打赏
  • 举报
回复
if (argc == 1)
fp == stdin;//
stdin是标准输入
while((fscanf(fp,"%lf",&n)) == 1)
argc==1时,fscanf相当于scanf
cao_julians 2010-09-07
  • 打赏
  • 举报
回复
stdin是个宏定义,对应着标准输入,standard input,键盘而已
k80179279 2010-09-07
  • 打赏
  • 举报
回复
stdin:标准输入流
Myth_cn 2010-09-07
  • 打赏
  • 举报
回复
fp == stdin;//这句是什么意思?
应该是fp = stdin;
没有命令行参数时,从标准输入读取数据
justkk 2010-09-07
  • 打赏
  • 举报
回复
if (argc == 1)
fp == stdin;//这句是什么意思?
------------------
你确定你没有抄错?应该是fp = stdin吧
stdin就是标准输入

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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