Я прочитал в CSV-файл в массив структуры.Затем программа попросит пользователя ввести название страны.с этим вводом я использовал strcmp, но независимо от того, что я никогда не получу, он совпадает и возвращает страну
Я убедился, что файл CSV читается правильно, и я также убедился, что ввод пользователясохранено правильно
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#define NAME_LENGTH 35
#define NUM_COUNTRY 32
struct country {
char countrys[35];
char group;
int goals;
int points;
}countries[NUM_COUNTRY];;
void search_by_country(void);
int find_country(char *countrys);
int read_line(char str[], int n);
int main(int argc, char *argv[])
{
int i=0;
int j;
char code;
FILE *worldcup;
if ((worldcup = fopen(argv[1], "r")) == NULL)
{
printf("%s can't be opened\n", argv[1]);
return 1;
}
fscanf(worldcup, "%*[^\n]");
while(!feof(worldcup) && !ferror(worldcup))
{
fscanf (worldcup, "%[^,], %c, %d, %d", countries[i].countrys,
&countries[i].group, &countries[i].goals, &countries[i].points);
i++;
}
for (j=0; j<i; j++){
printf("%s,%c,%d,%d", countries[j].countrys, countries[j].group,
countries[j].goals, countries[j].points);
}
for (;;) {
printf("Search by country: c\n");
printf("Quit: q\n");
printf("Enter operation code: ");
scanf(" %c", &code);
while (getchar() != '\n') /* skips to end of line */
;
switch (code) {
case 'c': search_by_country();
break;
case 'q': return 0;
default: printf("Illegal code");
}
printf("\n");
}
fclose(worldcup);
return 0;
}
int find_country(char *countrys)
{
int i;
for (i = 0; i < NUM_COUNTRY; i++)
if (strcmp(countries[i].countrys, countrys) == 0)
return i;
return -1;
}
void search_by_country(void)
{
char country_name[NAME_LENGTH+1];
printf("enter country name:");
read_line(country_name, NAME_LENGTH);
printf("%s", country_name);
int i = find_country(country_name);
if (i== -1){
printf("that country did not play");
}
else{
printf("%s,%c,%d,%d", countries[i].countrys, countries[i].group,
countries[i].goals, countries[i].points);
}}
int read_line(char str[], int n)
{
int ch, i = 0;
while (isspace(ch = getchar()))
;
while (ch != '\n' && ch != EOF) {
if (i < n)
str[i++] = ch;
ch = getchar();
}
str[i] = '\0';
return i;
}
В конечном счете find_country должна вернуть значение int, в котором я могу использовать для распечатки записи страны.однако я продолжаю получать -1 возврат и "эта страна не играла" как положенный результат