C — Дублирование Printf при использовании массива

Я надеюсь, что это не слишком простой вопрос о переполнении стека. Но у меня есть запрос, который пытается определить количество оценок в массиве, а затем запрашивать ввод пользователем каждой из этих оценок. Это выглядит так:

#include <stdio.h>


int main (void)
{
int size;

printf ("Enter The Amount Of Grades In Your Array: ");
scanf("%i", &size);/*Stores Amount Of Grades In The Array*/

char myGrades[size];
int i;

for (i = 0; i < size; ++i)
  {
  printf ("Enter the grade:");
  scanf ("%c",&myGrades[i]);
  }

return 0; 
}

Я ожидаю, что первая строка после int i будет читать "Enter The Grade:", но вместо этого она выглядит как "Enter The Grade:""Enter The Grade:"

Я не понимаю, почему он говорит, чтобы войти в класс во второй раз, не спрашивая моего мнения о первом «введите класс». Любые предложения будут высоко ценится!


c
person Americo    schedule 08.03.2013    source источник
comment
Не имеет отношения к вашей проблеме, но вы должны убедиться, что size имеет разумное значение. Если пользователь введет большое число, программа вылетит.   -  person teppic    schedule 08.03.2013


Ответы (1)


Ваш первый scanf оставляет \n позади, а затем автоматически читает его снова в следующий раз, как если бы вы нажали ввод (поэтому новая строка сохраняется в вашем массиве). Вы можете обойти это, используя вместо этого " %c". Пробел избавит вас от любых символов новой строки или пробелов перед нужным вам символом.

person teppic    schedule 08.03.2013