#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();
}
Структуры и файлы
Дан файл Tovar, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Составить список стран, в которые экспортируется данный товар, и общий объем его экспорта.
и файл с содержимым:
Fish Japan 590
Vodka Russia 345
Fish Poland 65
Milk USA 190
Fish England 75
Chiz China 565
Сначала пользователь вводит название товара, а дальше идет поиск и вывод, код недоработан,
он не выводит товар при совпадении.
Код:
Код:
И как в целом правильней реализовать эту задачу?
Цитата: kaizer131
Есть задача
Дан файл Tovar, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Составить список стран, в которые экспортируется данный товар, и общий объем его экспорта.
и файл с содержимым:
Fish Japan 590
Vodka Russia 345
Fish Poland 65
Milk USA 190
Fish England 75
Chiz China 565
Сначала пользователь вводит название товара, а дальше идет поиск и вывод, код недоработан,
он не выводит товар при совпадении.
Дан файл 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)
}
printf("Strana:\n%s postavlyaet %s v kolve %d shtuk.", item[j].strana, item[j].name, item[j].kolvo)
}
Update. Посмотрел повнимательней - заметил что у вас и в выводе с помощью printf порядок аргументов также неправильный, да еще используется какая-то переменная max в качестве значения индекса, хотя по идее надо j использовать. Здесь исправил - сравните со своим кодом.
Цитата: kaizer131
И как в целом правильней реализовать эту задачу?
Для начала я советовал бы вам обратить внимание на грамотное оформление кода (хотя бы сделать нормальные отступы), очень уж оно у вас небрежное...