2014-11-10 2 views
-1

У меня есть программа, в которой люди вводят информацию в массив структур. Информация включает название города, номер дня и температуру Фаренгейта. По какой-то причине он пропускает ту часть, где вы вводите название города.Не удается ввести строку в массив struct

void input_TempInfo(struct TempInfo * arr, int size) 
{ 
    int i, k; 

    for (i = 0, k = 0; k < size; i++, k++) 
    { 
     printf("\nEnter the city: "); 
     while (getchar() != '\n')  << **Edit** 
      ; 
     while (((arr[k].city[i] = getchar()) != '\n') && (i < MAXCHARS)) 
      i++; 
     arr[k].city[i] = '\0'; 

     do 
     { 
      printf("\nEnter the day: "); 
      scanf("%i", &arr[k].day); 
      if (arr[k].day < 1 || arr[k].day > 366) 
      { 
       printf("\nInvalid day number. Type another: "); 
       scanf("%i", &arr[k].day); 
      } 
     } while (arr[k].day < 1 || arr[k].day > 366); 

     printf("Enter a temperature in Fahrenheit: "); 
     scanf("%lf", &arr[k].fahr); 

     arr[k].cels = (arr[k].fahr - 32) * 5/9; 
    } 
} 

ответ

0

При чтении название города, вместо использования getchar() используйте scanf
Измените приведенный ниже код из

printf("\nEnter the city: "); 
    while (getchar() != '\n')  << **Edit** 
     ; 
    while (((arr[k].city[i] = getchar()) != '\n') && (i < MAXCHARS)) 
     i++; 
    arr[k].city[i] = '\0'; 

в

printf("Enter the city: \n"); 
    scanf("%s", &arr[k].city); 

или // без использования зсапЕ

char c; 
    while (((c = getchar()) != '\n') && (i < MAXCHARS -1)) { //Because the last character would be '\0' (NULL). 
     arr[k].city[i] = c; 
     i++; 
    } 
    arr[k].city[i] = '\0'; 
+0

Мне не разрешено использовать «scanf()» моему учителю это не нравится. –

+0

@JordanLindsay: обновленный ответ без использования 'scanf' –

0

Когда вы используете scanf(), символы новой строки остаются в stdin. Scanf() не имеет проблем с потреблением новых строк, но ваш цикл getchar() сразу заканчивается getchar()) != '\n'.

Вы можете проверить, является ли первый символ символом новой строки и использовать его перед чтением с помощью getchar().

+0

Поглощая его, вы имеете в виду использование «wh ile 'loop? Подобно 'while (getchar()! =' \ N ');' –

+0

Я использовал цикл while, чтобы очистить буфер клавиатуры, прежде чем вводить названия городов, но любое название города после первого перепутано. –

Смежные вопросы