Не работает ввод и вывод строки программирование - C (СИ)
Формулировка задачи:
Нужно ввести в начале строку в файл, не важно как, но лучше с клавиатуры, и вывести ее из файла в консоль(не затрагивая следующие задания), не понимаю что не так, помогите пожалуйста. ВВОД СТРОКИ ПЕРЕД ЗАДАНИЯМИ исправлять здесь.
#include "stdafx.h" #include <time.h> #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <locale.h> int main() { setlocale(LC_ALL, "Russian"); char input_file[255], output_file[255];//адреса 2х файлов FILE *input, *output;//потоки для 2х файлов //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ЗАДАЧА№1 const int x = 20;//массив int A[x]; int sum = 0; int pos = 0;// переменная для указателя положения int * p = A; char outputString[255]; srand(time(NULL)); //ФАЙЛ ИСХОДНЫХ ДАННЫХ printf("Имя файла исходных данных: "); scanf("%s", input_file);//адрес файла для исх. данных input = fopen(input_file, "w");//открытие файла для записи while (input == NULL) { //на случай неправильного имени файла printf("Ошибка при открытии файла исходных данных!\nВведите имя файла исходных данных еще раз: "); scanf("%s", input_file); input = fopen(input_file, "w"); } //ФАЙЛ РЕЗУЛЬТАТОВ printf("Имя файла результатов: "); scanf("%s", output_file);//адрес файла для результатов output = fopen(output_file, "w+");// открытие файла для записи и чтения while (input == NULL) { printf("Ошибка при открытии файла результатов!\nВведите имя файла результатов еще раз: "); scanf("%s", output_file); output = fopen(output_file, "w+"); } /////////////////////////// ВВОД СТРОКИ ПЕРЕД ЗАДАНИЯМИ ///////////////////////////////////////// input = freopen(input_file, "r+", input); fprintf(input, "Какая-то строка\n"); fseek(output, pos, SEEK_SET); fgets(outputString, 255, output); printf("%s\n", outputString); fseek(output, 0, SEEK_END); /////////////////////////////////////////////////////////////////// //ЗАПОЛНЕНИЕ ФАЙЛА INPUT ИСХОДНЫМИ ДАННЫМИ А) fprintf(input, "а) Массив А(%d):\n",x); pos = ftell(input); //значение указателя положения потока на начало исх.данных (после строки, введенной выше) for (int i = 0; i < x; i++) { fprintf(input, "%d\n", rand()%10+(-5));//заполнение файла исх. данных числами } //ИЗВЛЕЧЕНИЕ ДАННЫХ А) ИЗ ФАЙЛА В МАССИВ ARR input = freopen(input_file, "r", input);//открытие файла для чтения fseek(input, pos, SEEK_SET);//перемещение указателя относительно начала файла на POS вперед for (int i = 0; i < x; i++) { fscanf(input, "%d", &A[i]);//заполнение массива из файла printf("%d\n", A[i]); } //ВЫВОД РЕЗУЛЬТАТОВ В ФАЙЛ OUTPUT pos = ftell(output); //ОБРАБОТКА МАССИВА ARR for (int i = 0; i < x; i++) { if (*(p+i) >= 0) { fprintf(output, " %d ",*(p+i)); } } for (int i = 0; i < x; i++) { if (*(p+i) < 0) { fprintf(output, " %d ",*(p+i)); } } //ВЫВОД РЕЗУЛЬТАТОВ ИЗ ФАЙЛА В КОНСОЛЬ fseek(output, pos, SEEK_SET); fgets(outputString, 255, output); printf("%s\n", outputString); fseek(output, 0, SEEK_END); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////ЗАДАЧА№2 const int N = 10; const int M = 10; int matrix[N][M]; p = &matrix[0][0]; char outputStringg[255]; input = freopen(input_file, "a", input);//открытие файла для записи в конец fprintf(input, "б) Двумерный массив M(%d,%d):\n", N, M); pos = ftell(input); //ЗАПОЛНЕНИЕ ФАЙЛА INPUT ИСХОДНЫМИ ДАННЫМИ Б) for (int i = 0; i < N*M; i++) { fprintf(input, "%d", rand()%10+(-5)); if (((i + 1) % M) == 0) fprintf(input, "\n"); else fprintf(input, "\t"); } //ИЗВЛЕЧЕНИЕ ДАННЫХ Б) ИЗ ФАЙЛА В МАССИВ MATRIX input = freopen(input_file, "r", input);//открытие файла для чтения fseek(input, pos, SEEK_SET);//перемещение указателя относительно начала файла на POS вперед for (int i = 0; i < N*M; i++) { fscanf(input, "%d", p); printf("%d\t", *p); if (((i + 1) % M) == 0) printf("\n"); p++; } pos = ftell(output); //ОБРАБОТКА МАССИВА MATRIX const double K = 10; double srednee = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { sum += *((int *) matrix + (i * 10) + j); } srednee = sum / K; sum = 0; fprintf(output, " %f ", srednee); } //ВЫВОД РЕЗУЛЬТАТОВ В ФАЙЛ OUTPUT //ВЫВОД РЕЗУЛЬТАТОВ ИЗ ФАЙЛА В КОНСОЛЬ fseek(output, pos, SEEK_SET); fgets(outputStringg, 255, output); printf("%s", outputStringg); //ЗАКРЫТИЕ И РАЗЪЕДИНЕНИЕ ФАЙЛОВ, СВЯЗАННЫХ С ПОТОКОМ fclose(input); fclose(output); getch(); }
Решение задачи: «Не работает ввод и вывод строки программирование»
textual
Листинг программы
fscanf (input,"%s",outputString);
Объяснение кода листинга программы
- Входные данные:
- input (тип: FILE*) - файловый указатель, который указывает на файл, из которого считываются данные
outputString
(тип: char*) - указатель на строку, в которую считываются данные
- Выполняемые действия:
- С помощью функции fscanf считывается строка из файла, указанного в переменной input.
- Считанная строка сохраняется в переменной
outputString
.
- Выходные данные:
outputString
(тип: char*) - содержит считанную строку.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д