2016-07-18 3 views
-1

я писал этот код:fgets не копируя первую букву

  check_name = 0; 
      printf("Enter the Location of the photo:\n"); 
      fgets(location, MAX_LOCATION_SIZE, stdin); 
      printf("Enter the name of the photo:\n"); 
      count = 0; 
      while (check_name == 0) 
      { 
       if (count > 0) 
       { 
        printf("The name is already in the list!\nChoose another one:\n"); // will not do it only for the first time 
       } 
       getchar; 
       fgets(name, MAX_NAME_SIZE, stdin); 
       check_name = checkName(frameList, name); 
       count++; 
      } 

Я объясню, что теперь все:

Я сделал check_name, потому что я делаю тест, чтобы проверить, если имя уже список (Это не имеет особого значения для этой проблемы, поэтому я не буду загружать код, если вам это не понадобится)

Я положил getchar до fgets, потому что без него его даже не просили назвать имя.

Everytime, что я ввожу что-то к fgets(entering a name) его не копируя мое первое письмо (если я поставил Декстер свою спасительную Экстер), и я уже проверил, что я дал ему достаточно места (char name[50] - мой учитель сказал, как это будет max)

+3

'getchar;' или 'getchar()' ??? –

+1

, если 'getchar;' не навязывал хотя бы предупреждение, вам нужно поднять уровни предупреждений на своих коммутаторах компилятора. Вы должны были получить что-то вроде эффекта «Результат выражения не используется» или некоторые из них. – WhozCraig

+0

Пожалуйста, напишите полные компилируемые примеры, которые вы уже запускали и тестировали на местном уровне, чтобы показать точные проблемы, которые у вас есть .... или мы можем месяцами пытаться найти то, о чем вы говорите (и, кроме того, вы не знаете, где ошибка, так что сложно передать ее, если вы не публикуете ** точный код, который вы написали **) –

ответ

1

getchar() получит один символ, и остальная часть символа доступна для fgets(). поэтому удалите это. если у вас возникли проблемы с потерей одного символа в первый раз ... поставьте getchar() перед циклом. или даже вы можете написать scanf("%*c");

+0

'getchar;' - выражение с неиспользуемым результатом, а не вызовом функции. – evaitl

+0

да. в данном сегменте кода это выражение. но в вопросе говорится, что он использует getchar 'I put" getchar "перед« fgets », потому что без него, даже не запрашивая имя.« заставьте приглашение появиться и взять один символ. Выражение не может сделать так, чтобы это был вызов. Если это вызов, то возникает эта проблема. –

+0

'getchar;' будет в основном давать ошибку компиляции о некотором некотором идентификаторе (или недопустимом типе объекта, если вы включили правый заголовочный файл, а у компилятора есть прототип для него). Пожалуйста, отправьте полные компилируемые примеры кода и отказаться от отправки фрагментов кода. Фрагменты отражают только ваше представление о том, что происходит, а не то, что ** на самом деле происходит ** (и, конечно, в вашей идее, вероятно, ошибка не включена, а не понятие недопонимание) –

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