Работа с аргументами командной строки, 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д