题:
编写一个程序, 以一个字符和任意文件名作为命令行参数。 如果字符后面没有参数, 该程序读取标准输入; 否 则, 程序依次打开每个文件并报告每个文件中该字符出现的次数。 文件名和字符本身也要一同报告。 程 序应包含错误检查, 以确定参数数量是否正确和是否能打开文件。 如果无法打开件, 程序应报告这一情况, 然后继续处理下一个文件
以上是原题,这里是其中读取标准输入部分,但是每次输入完后fname[ ]的所有内容都归零了,怎么办?


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * s_gets(char *, int);
int main()
{
int i;
int fnum;
char *fname[15];
char stemp[41];
FILE *fp;
for (i=0; (fname[i] = s_gets(stemp, 41)) != NULL && i<2;i++)
{
printf("%s, %s\n",fname[i], stemp);
}
fnum = i+1;
for (i=0;i<fnum;i++)
printf("fname[%d] :%s\n",i,fname[i]);
for (i = 0; i < fnum; i++){
if ((fp = fopen(fname[i],"r")) == NULL)
{
fprintf(stderr, "Error in opening %s\n",fname[i]);
continue;
}
}
return 0;
}
char * s_gets(char * st, int n)
{
char * ret_val;
char * find;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
find = strchr(st, '\n');
if (find)
*find = '\0';
else
while (getchar() != '\n')
continue;
}
return ret_val;
}
编写一个程序, 以一个字符和任意文件名作为命令行参数。 如果字符后面没有参数, 该程序读取标准输入; 否 则, 程序依次打开每个文件并报告每个文件中该字符出现的次数。 文件名和字符本身也要一同报告。 程 序应包含错误检查, 以确定参数数量是否正确和是否能打开文件。 如果无法打开件, 程序应报告这一情况, 然后继续处理下一个文件
以上是原题,这里是其中读取标准输入部分,但是每次输入完后fname[ ]的所有内容都归零了,怎么办?


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * s_gets(char *, int);
int main()
{
int i;
int fnum;
char *fname[15];
char stemp[41];
FILE *fp;
for (i=0; (fname[i] = s_gets(stemp, 41)) != NULL && i<2;i++)
{
printf("%s, %s\n",fname[i], stemp);
}
fnum = i+1;
for (i=0;i<fnum;i++)
printf("fname[%d] :%s\n",i,fname[i]);
for (i = 0; i < fnum; i++){
if ((fp = fopen(fname[i],"r")) == NULL)
{
fprintf(stderr, "Error in opening %s\n",fname[i]);
continue;
}
}
return 0;
}
char * s_gets(char * st, int n)
{
char * ret_val;
char * find;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
find = strchr(st, '\n');
if (find)
*find = '\0';
else
while (getchar() != '\n')
continue;
}
return ret_val;
}