C 如何打印文件中的数据
我很快就要参加c语言考试了,我需要一些文件方面的帮助。所以 任务是:用户将数据从控制台输入到文件(“prod.txt”),然后我需要将数据从文件打印到显示器上。我使用C 如何打印文件中的数据,c,file,eof,C,File,Eof,我很快就要参加c语言考试了,我需要一些文件方面的帮助。所以 任务是:用户将数据从控制台输入到文件(“prod.txt”),然后我需要将数据从文件打印到显示器上。我使用=EOF来打印它,但它不起作用。我试着使用==5(变量的数量),但它也没有发出呜呜声。我的代码 #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #include <loca
=EOF
来打印它,但它不起作用。我试着使用==5(变量的数量),但它也没有发出呜呜声。我的代码
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <Windows.h>
struct icx //структурный файл для данных входного файла
{
char media[100]; float year1937; float year1940; float year1950; float year1958;
};
struct icx a;
struct icx b;
struct icx c;
struct icx d;
struct icx e;
char ss1[110] = "________________________________________________________________________________________";
char ss2[110] = "________________________________________________________________________________________";
void print_menu()
{
system("cls"); // очищаем экран
printf("\nМеню\n");
printf("\n1. Создание исходного файла.");
printf("\n2. Вывод на экран содержимого исходного файла.");
printf("\n3. Обработка исходного файла.");
printf("\n4. Вывод на экран содержимого выходного файла.");
printf("\n5. Конец работы.\n");
printf("\n");
}
int get_variant(int count)
{
int variant;
// пока ввод некорректен, сообщаем об этом и просим повторить его
while (scanf_s("%i", &variant) != 1 || variant < 1 || variant > count)
{
printf("Некорректный ввод. Попробуйте снова: "); // выводим сообщение об ошибке
scanf_s("%i", &variant); // считываем строку повторно
}
printf("\n");
return variant;
}
void shapka1() {
printf("%s\n", ss1);
printf("! Средства массовой информации ! 1937 ! 1940 ! 1950 ! 1958!\n");
printf("%s\n", ss1);
}
void shapka2()
{
printf("%s\n", ss2);
printf("! Вид СМИ ! Доля в 1937 ! Доля в 1940 ! Доля в 1950 ! Доля в 1958 ! \n");
printf("%s\n", ss2);
}
void read_print_icx(FILE *prod) {
struct icx str;
printf("Входной файл\n");
shapka1();
while (fscanf_s(prod, "%s%f%f%f%f", str.media, _countof(str.media), &str.year1937, &str.year1940, &str.year1950, &str.year1958) != EOF) {
printf("\n! %-17s ! %5.1f ! %5.1f ! %5.1f ! %5.1f !", str.media, str.year1937, str.year1940, str.year1950, str.year1958);
printf("\n");
printf("%s\n", ss1);
}
}
void read_for_job(FILE *prod) {
fscanf_s(prod, "%s%f%f%f%f", a.media, _countof(a.media), &a.year1937, &a.year1940, &a.year1950, &a.year1958);
fscanf_s(prod, "%s%f%f%f%f", b.media, _countof(b.media), &b.year1937, &b.year1940, &b.year1950, &b.year1958);
fscanf_s(prod, "%s%f%f%f%f", c.media, _countof(c.media), &c.year1937, &c.year1940, &c.year1950, &c.year1958);
fscanf_s(prod, "%s%f%f%f%f", d.media, _countof(d.media), &d.year1937, &d.year1940, &d.year1950, &d.year1958);
fscanf_s(prod, "%s%f%f%f%f", e.media, _countof(e.media), &e.year1937, &e.year1940, &e.year1950, &e.year1958);
}
void write_prod(FILE *prod) { // п1 меню
if (&prod == NULL) {
perror("Failed: ");
return 1;
}
printf("Ввод данных таблицы : \n");
scanf_s("%s%f%f%f%f", a.media, (unsigned)_countof(a.media), &a.year1937, &a.year1940, &a.year1950, &a.year1958);
scanf_s("%s%f%f%f%f", b.media, (unsigned)_countof(b.media), &b.year1937, &b.year1940, &b.year1950, &b.year1958);
scanf_s("%s%f%f%f%f", c.media, (unsigned)_countof(c.media), &c.year1937, &c.year1940, &c.year1950, &c.year1958);
scanf_s("%s%f%f%f%f", d.media, (unsigned)_countof(d.media), &d.year1937, &d.year1940, &d.year1950, &d.year1958);
scanf_s("%s%f%f%f%f", e.media, (unsigned)_countof(e.media), &e.year1937, &e.year1940, &e.year1950, &e.year1958);
fprintf(prod, "\n %-14s %5.2f %5.2f %5.2f %5.2f ", a.media, a.year1937, a.year1940, a.year1950, a.year1958);
fprintf(prod, "\n %-14s %5.2f %5.2f %5.2f %5.2f ", b.media, b.year1937, b.year1940, b.year1950, b.year1958);
fprintf(prod, "\n %-14s %5.2f %5.2f %5.2f %5.2f ", c.media, c.year1937, c.year1940, c.year1950, c.year1958);
fprintf(prod, "\n %-14s %5.2f %5.2f %5.2f %5.2f ", d.media, d.year1937, d.year1940, d.year1950, d.year1958);
fprintf(prod, "\n %-14s %5.2f %5.2f %5.2f %5.2f ", e.media, e.year1937, e.year1940, e.year1950, e.year1958);
fclose(prod);
}
int main(){
setlocale(LC_ALL, "ru_RU.UTF-8");
SetConsoleCP(1251); // Ввод с консоли в кодировке 1251
SetConsoleOutputCP(1251);
FILE *prod;
fopen_s(&prod, "prod.txt", "w");
//int variant; //пункт меню
float oldradio1937, oldradio1940, oldradio1950, oldradio1958; // процент распространения трансляционных приемников
float radio1937, radio1940, radio1950, radio1958; // процент распространения радио
//fopen_s(&prod, "prod.txt", "w");
write_prod(prod);
read_print_icx(prod);
printf("Выполнение расчетов\n");
oldradio1937 = b.year1937 / a.year1937;
oldradio1940 = b.year1940 / a.year1940;
oldradio1950 = b.year1950 / a.year1950;
oldradio1958 = b.year1958 / a.year1958;
radio1937 = d.year1937 / c.year1937;
radio1940 = d.year1940 / c.year1940;
radio1950 = d.year1950 / c.year1950;
radio1958 = d.year1958 / c.year1958;
printf("\n%f%f%f%f%f%f%f%f", oldradio1937, oldradio1940, oldradio1950, oldradio1958, radio1937, radio1940, radio1950, radio1958);
_getch();
return 0;
}
我不知道如何修复它,甚至尝试get
和put
。没有结果。
请帮助我。您的写入功能将关闭文件。发生这种情况后,什么会打开它?不相关,但在
get\u variant
中,您在循环中请求输入两次,并忽略其中一个值。你可能不想在循环中使用scanf。斯科特·约翰逊,你的意思是,我需要先再次打开文件,然后打印数据吗?格哈德,谢谢你的建议。是的,你必须重新打开它。您正在write\u prod(prod)中关闭文件代码>功能,然后在读取打印icx(prod)
中尝试读取prod
,再次打开文件时,使用fopen_s(&prod,“prod.txt”,“r”);-cos在写入模式下再次打开,其内容将被擦除。
while (fscanf_s(prod, "%s%f%f%f%f", str.media, _countof(str.media), &str.year1937, &str.year1940, &str.year1950, &str.year1958) != EOF) {
printf("\n! %-17s ! %5.1f ! %5.1f ! %5.1f ! %5.1f !", str.media, str.year1937, str.year1940, str.year1950, str.year1958);
printf("\n");
printf("%s\n", ss1);
}