функция не возвращает значения, как ожидалось - PullRequest
0 голосов
/ 10 июля 2019

Я прочитал в 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 возврат и "эта страна не играла" как положенный результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...