Не работает ввод и вывод строки программирование - 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*) - содержит считанную строку.