Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Си

55K
12 декабря 2010 года
g00dv1n
22 / / 28.11.2010
Задание
Из файла считать данные в структуру и вывести все это на экран, как таблицу.
Не могу нормально считать данные из файла в сруктуру. Вот код , подскажите, что не так.И вот следующим образом я записую данные в файл:
1961 2.4 4.2 6.3 3.2 1962 2.1 4.7 6.3 3.1 1963 4.1 3.4 5.3 7.2 1964 5.2 5.3 3.3 5.3


Заранее благодарен.
Код:
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
void file_open(char file_name[]);
void tabl();
struct strani{
    int year;
    float USA;
    float England;
    float France;
    float USSR;
}tab[100];

void main()
{
    FILE * pfile;
    char fname[15];
    system("chcp 1251");
    printf("Введите имя файла: ");
    scanf("%s",&fname);
    file_open(fname);

   
    getch();
}

void file_open(char file_name[]){
    FILE * file;
    int i=0;
    if((file=fopen(file_name,"r"))==NULL){
        printf("Файл не найден\n");
        getch();
        exit(-1);
       
    }
    while(fscanf(file,"%d",&tab.year)!=EOF){
        fscanf(file,"%d",&tab.year);
        fscanf(file,"%d",&tab.USA);
        fscanf(file,"%d",&tab.England);
        fscanf(file,"%d",&tab.France);
        fscanf(file,"%d",&tab.USSR);
        i++;
    }

    fclose(file);

   

}
void tabl(){
    printf("----------------------------------\n");
    printf("|Год |США|Англия|Франция|СССР|\n");
    printf("-----------------------------------\n");
}
244
12 декабря 2010 года
UAS
2.0K / / 19.07.2006
Я не программист на Си, но что-то мне подсказывает, что в строчках, подобных fscanf(file,"%d",&tab.France) использовать %d не верно, т.к. вы считываете так-то дробные числа. Надо %f.
392
12 декабря 2010 года
cronya
421 / / 03.01.2009
Цитата: g00dv1n
Задание
Из файла считать данные в структуру и вывести все это на экран, как таблицу.]



Скорее всего ошибка сдесь

 
Код:
while(fscanf(file,"%d",&tab.year)!=EOF)
// не факт что у вас именно так получится в файле
Попробуйте так:
 
Код:
while(!feof(file))

Если есть мусор, то можно так попробовать.
 
Код:
fscanf(file,"%d",&tab.year);
.....
while(!feof(file))
{
   i++;
   fscanf(file,"%d",&tab.year);
   ........
}
63K
12 декабря 2010 года
50bites
24 / / 12.12.2010
все действительно так как сказали участники форума чуть выше
замените следующее и все будет работать
Цитата:

printf("начало считывания\n");
while(!feof(file))
{
fscanf(file,"%i",&tab.year);
fscanf(file,"%f",&tab.USA);
fscanf(file,"%f",&tab.England);
fscanf(file,"%f",&tab.France);
fscanf(file,"%f",&tab.USSR);
i++;
}
printf("конц считывания\n");

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог