Вы наблюдаете поведение, потому что, если символ новой строки не записывается в ID из-за отсутствия места, он остается во входном буфере, который последующие два вызова scanf()
не используют из-за того, что строка спецификатора формата не читается белым пространство.
fgets()
возвращается при вводе новой строки, и новая строка записывается в буфер. В этом случае вам необходим буфер из 12 символов - для размещения новой строки и нулевого терминатора. Хорошей идеей является также инициализация буфера нулями.
char ID[11] = {0} ;
После fgets()
вам может потребоваться заменить символ новой строки на ноль.
Чтобы заменить новую строку на nul или отбросить данные входного буфера, где новая строка остается:
char* end = strrchr( ID, `\n` ) ;
if( end != NULL)
{
*end = `\0`
}
else
{
char c ;
do
{
c = getchar() ;
} while( c != '\n' && c != EOF ) ;
}
Первая вещь, можно выполнить автосканирование в корневом каталоге проекта. Это просканирует дерево проекта и генерирует configure.scan при попытке обнаружить непортативные функции. Затем Вы переименовываете его к configure.ac, редактируете его соответственно и пишете файлы Makefile.am.
Я предлагаю, чтобы Вы искали этот процесс (особенно автосканирование) в руководстве автоинструментов GNU для деталей. Это уменьшит Ваше усилие, но по крайней мере Вы не запустите с нуля с создания тех файлов.
Эта ссылка - то, для чего я погуглил после того, чтобы читать это сообщение. Это ответило на мои вопросы о том, как создать./файл конфигурации.