Вы должны проверить, что ваши операции ввода работали; вещи идут, когда вы этого не делаете.
Этот призыв к scanf()
:
scanf(c, " %c", c);
должен (как chux диагнозов в его answer) быть написаны по-разному, но я думаю, что это должно быть больше как:
char filler;
if (scanf(" %c", &filler) != 1)
…report problem…
Оригинальная версия использует которая была просто прочитана как строка форматирования, и почти наверняка не удалось совместить второй вход. Если вы просто используете scanf(" %c", c)
, что является самым простым редактированием, вы перезаписываете первый символ строки ввода следующим непустым символом.
Тогда возникает вопрос, почему вы заставляете пользователя вводить дополнительные данные после имени компонента. Они должны что-то ввести. В следующем fgets()
код будет считываться после первого символа до следующей новой строки. Итак, если вы набрали:
component-1
component-2
Первый fgets()
прочтет component-1
и символ новой строки; scanf()
с внесенными в него поправками будет читать c
от component-2
до c[0]
, а затем следующий fgets()
будет читать omponent-2
плюс новую строку в c
на следующей итерации.
Вы могли видеть больше того, что происходит путем добавления кода для печати, что вы читаете, как вы читаете это:
printf("Line 1: [[%s]]\n", c); // after the fgets()
printf("Line 2: [[%s]]\n", c); // after the scanf()
Это один из самых основных методов отладки; эхо прочитайте, чтобы убедиться, что программа получила данные, которые, по вашему мнению, они получили.
Что означает 'scanf (c,"% c ", &c);' Предполагаемое значение? Что вы пытались сделать этим вызовом 'scanf'? – AnT