Работа с аргументами командной строки, stream!=null - C (СИ)
Формулировка задачи:
Пишу прогу, которая будет принимать в качестве аргументов командной строки текстовые файлы, брать из них числа и выводить по порядку.
Выскакивает ошибка: stream!=null
Что можно сделать?
PS free() не хватает, но это не проблема на данном этапе
#include <stdio.h>
#include <stdlib.h>
void print(FILE ** files,char * argv[],int argc)
{
double * input = NULL;
double min=0;
int i=0;
int minnum=0;
//открывание файлов
input = (double *)calloc(argc-1, sizeof(double));
for(i = 0; i <argc-1; i++)
{
files[i] = fopen(argv[i + 1], "r");
if(NULL == files[i])
{
printf("File \"%s\" not found\n",argv[i + 1]);
}
}
//проверка
for(i=0;i<argc-1;i++)
{
if(fscanf(files[i], "%lf ", &input[i])==EOF)
{
fclose(files[i]);
files[i] = NULL;
printf("File \"%s\" ruturn -1\n",argv[i+1]);
continue;
}
}
//вывод
while(1<2)
{
for(i=0;i<argc-1;i++)
{
if(NULL!=files[i])
{
if(input[i]<input[minnum])
{
minnum = i;
}
}
}
if(EOF == minnum)
{
break;
}
printf("%lf\n", input[minnum]);
min=input[minnum];
if(EOF == fscanf(files[minnum], "%lf", &input[minnum]))
{
fclose(files[minnum]);
files[minnum] = NULL;
continue;
}
else
{
if(min>input[minnum])
{
printf("File \"%s\" not valid.\n",argv[minnum+1]);
fclose(files[minnum]);
files[minnum] = NULL;
}
}
}
}
int main(int argc, char * argv[])
{
FILE **files=NULL;
int i=0;
int filecount=0;
files=(FILE **)calloc(argc,sizeof(FILE *));
print(files,argv,argc);
}Решение задачи: «Работа с аргументами командной строки, stream!=null»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void scan(FILE ** files,char * argv[],int argc)
{
int i=0;
for(;i<argc-1;i++)
files[i]=fopen(argv[i+1],"r");
}
void print(FILE ** files,char * argv[],int argc)
{
double * input = NULL;
double min=0;
int i=0;
int imin=-1;
int fileqty=argc-1;
int check=1;
int scanfreturn=0;
int scanfreturn2=0;
int ti=0;
int k=0;
input=(double *)calloc(argc-1,sizeof(double));
//проверка
for(;i<argc-1;i++)
{
if(NULL!=files[i])
{
scanfreturn=fscanf(files[i], "%lf ", &input[i]);
if(EOF==scanfreturn)
{
fclose(files[i]);
files[i] = NULL;
printf("\"%s\" empty\n",argv[i+1]);
fileqty--;
continue;
}
}
else
{
printf("\"%s\" not found\n",argv[i+1]);
fileqty--;
}
}
if(fileqty==0)
return;
do
{
//поиск минимума
check=1;
ti=i;
for(i=0;i<argc-1;i++)
{
if(NULL!=files[i])
{
if(check)
{
imin=i;
check=0;
continue;
}
if(input[i]<input[imin])
{
imin=i;
}
}
}
i=ti;
if(NULL!=files[i])
{
if(input[imin] != 666)
printf("%lf\n", input[imin]);
else
{
input[imin] = 777;
k=1;
}
if (input[imin] != 777)
{
min = input[imin];
}
scanfreturn2=fscanf(files[imin], "%lf", &input[imin]);
if(EOF==scanfreturn2)
{
fclose(files[imin]);
files[imin] = NULL;
fileqty--;
continue;
}
if(0==scanfreturn2)
{
fscanf(files[imin], "%c");
input[imin]=666;
}
if(min > input[imin])
{
fclose(files[imin]);
files[imin] = NULL;
fileqty--;
printf("\"%s\" dont true\n",argv[imin+1]);
}
}
}
while(fileqty);
if (k)
printf("input data have dont INT symbols, but anyway TRUE\n");
free(input);
}
int main(int argc, char * argv[])
{
FILE **files=NULL;
int i=0;
int filecount=0;
files=(FILE **)calloc(argc-1,sizeof(FILE *));
if(NULL == files)
{
printf("Fatal Eror");
return 2;
}
if(1==argc)
{
printf("Didnt see file names");
return 1;
}
scan(files,argv,argc);
print(files,argv,argc);
printf("END");
free(files);
getchar();
}