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

Ваш аккаунт

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

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

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

Структуры и файлы

55K
21 февраля 2010 года
kaizer131
4 / / 21.02.2010
Есть задача
Дан файл Tovar, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Составить список стран, в которые экспортируется данный товар, и общий объем его экспорта.

и файл с содержимым:

Fish Japan 590
Vodka Russia 345
Fish Poland 65
Milk USA 190
Fish England 75
Chiz China 565
Сначала пользователь вводит название товара, а дальше идет поиск и вывод, код недоработан,
он не выводит товар при совпадении.
Код:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <string.h>
void main ()
{
clrscr();
typedef struct _tovar
{
char name[10];
char strana[10];
int kolvo;
} tovar;
FILE *f = fopen("tovar.txt", "r");
 tovar  item[5];
 if (f==NULL)
{
 cout << "File not found";
}
char poisk[10];
cout << "Chto isem :";
cin >>poisk;
int templ=0;
int i = -1;
while(!feof(f)) {
i++;
fscanf(f, "%s%d%s", item.name, &item.kolvo, item.strana);
}
for (int j = 0; j <= i; j++) {
   
if (strcmp(item[j].name, poisk)) {
printf("Srtana:\n%s postavlyaet %s v kolve %d shtuk.", item[max].name, item[max].strana, item[max].kolvo)
}
}
;
fclose(f);
getch();
}




И как в целом правильней реализовать эту задачу?
12K
21 февраля 2010 года
Ghox
297 / / 26.07.2009
Цитата: kaizer131
Есть задача
Дан файл Tovar, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Составить список стран, в которые экспортируется данный товар, и общий объем его экспорта.

и файл с содержимым:

Fish Japan 590
Vodka Russia 345
Fish Poland 65
Milk USA 190
Fish England 75
Chiz China 565
Сначала пользователь вводит название товара, а дальше идет поиск и вывод, код недоработан,
он не выводит товар при совпадении.


Вижу у вас два замечания:
1. Судя по приведенному вами примеру файла, формат каждой строки таков: сначала идет имя товара, потом - страна, потом - количество. Но считывать с помощью fscanf вы пытаетесь не в том порядке как в вашем файле.
Должно быть как-то так:

 
Код:
fscanf(f, "%s%s%d", item.name, item.strana, &item.kolvo);

2. При поиске строк, для которых название товара совпадает с введенным пользователем, вы используете функцию strcmp в условии на проверку. Но следует учесть, что strcmp в случае, когда строки равны, возвращает 0, что в вашем текущем варианте означает, что условие не выполнится (0 в булевском контексте означает false). Чтобы выполнилось, нужно поставить отрицание:
 
Код:
if(!strcmp(item[j].name, poisk)) {
        printf("Strana:\n%s postavlyaet %s v kolve %d shtuk.", item[j].strana, item[j].name, item[j].kolvo)
    }

Update. Посмотрел повнимательней - заметил что у вас и в выводе с помощью printf порядок аргументов также неправильный, да еще используется какая-то переменная max в качестве значения индекса, хотя по идее надо j использовать. Здесь исправил - сравните со своим кодом.
Цитата: kaizer131
И как в целом правильней реализовать эту задачу?


Для начала я советовал бы вам обратить внимание на грамотное оформление кода (хотя бы сделать нормальные отступы), очень уж оно у вас небрежное...

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