Считать числа из файла в массив - C (СИ)
Формулировка задачи:
В файле записано неизвестное количество чисел. Нужно считать их в одномерный массив.
c[i] выводит неверные. Как правильно можно это осуществить?
#include<stdio.h> #include<stdlib.h> int main(){ int k,i; FILE *ptrfile; k=0; int s; ptrfile=fopen("C:\\Users\\Самсунг\\Desktop\\mass.txt","r+"); while ((fscanf(ptrfile, "%d",&s)!=EOF)) { k+=1; printf ("k=%d ",k); printf ("s=%d\n",s); } int c[k]; for(i=0;i<k;i++) { fscanf(ptrfile, "%d",&c[i]); printf("c[%d]=%d ",i,c[i]); } fclose(ptrfile); }
Решение задачи: «Считать числа из файла в массив»
textual
Листинг программы
#include<stdio.h> #include<stdlib.h> int main() { int k,i; FILE *ptrfile; k=0; int s; ptrfile=fopen("mass.txt","r+"); //так мне было короче ) while ((fscanf(ptrfile, "%d",&s)!=EOF)) { if(!ptrfile) break; //чтобы не делал лишнего k+=1; } int *c = (int*) malloc(k*sizeof(int)); //должен быть динамическим rewind(ptrfile); //перематываем файл для повторного чтения for(i=0;i<k;i++) { fscanf(ptrfile, "%d",&c[i]); printf("c[%d]=%d ",i,c[i]); } fclose(ptrfile); free(c); //убираем мусор, когда уже не нужен (но не раньше =)) getchar(); //задержка консоли return 0; }
Объяснение кода листинга программы
В этом коде:
- Включаются необходимые заголовочные файлы.
- Определяются переменные: k, i, s, ptrfile, c.
- Устанавливается значение k=0.
- Открывается файл
mass.txt
для чтения и записи. - Начинается цикл while, который выполняется до тех пор, пока не встретит конец файла.
- Внутри цикла считывается число из файла в переменную s.
- Увеличивается значение k на единицу.
- Выделяется динамическая память под массив c.
- Перематывается файл обратно к началу.
- Начинается цикл for, который выполняется k раз.
- Внутри цикла считывается число из файла в соответствующий элемент массива c.
- Выводится на экран значение элемента массива c.
- Закрывается файл.
- Освобождается выделенная память.
- Блокируется консоль для ввода.
- Возвращается 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д