C scanf пропускает второй раз - PullRequest
0 голосов
/ 01 октября 2018

Я читал о размещении пробелов перед scanf, но все, что я пробую, не работает.Я пытаюсь читать в двух наборах по три целых числа.Первый scanf работает нормально, а второй - нет.Я разочарован, потому что я пробую все, что вижу на форумах, с размещением пробелов перед символами новой строки и ничто не работает.

Код, о котором идет речь:

// Get user input for the two dates:
printf("Enter Date #1 in format mm:dd:yyyy \n");
scanf("%i:%i:%i\n", &D1.month, &D1.day, &D1.year);

printf("Enter Date #2 in format mm:dd:yyyy\n");
scanf("%i:%i:%i", &D2.month, &D2.day, &D2.year);

Я попытался вставить пробел И символ новой строки отдельно и вместе, я попытался прочитать фиктивный символ переменной, чтобы увидеть, сработает ли это,Почему я не могу ввести какие-либо данные во второй скан? ??

Вывод показан:

Enter Date #1 in format mm:dd:yyyy 
09:06:1995
Enter Date #2 in format mm:dd:yyyy
The number of days between 0:1529117256:94769206 and 9:6:1995 is -1783102426

Я пишу новый пост, потому что вижу объяснения с символами, но не с целыми числами.

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Когда вы используете %i с scanf:

scanf("%i",&inp);  //INPUT 09 AS MONTH OR ANYTHING

Он будет читать ввод как восьмеричный из-за префикса 0 или ведущего нуля, когда ввод 09следовательно, значение inp становится недействительным, поскольку 9 не является действительной восьмеричной цифрой, восьмеричные цифры равны 0,1,2,3,4,5,6,7.

Где, как в случае, когда используется %d, чем 09 inputне будет преобразовано в восьмеричное , и считанное значение будет 9.

Кроме этого, я хотел бы предложить следующее: away-from-scanf

0 голосов
/ 01 октября 2018

Кроме того:

"%d:%d:%d\n"

не будет работать.Не помещайте '\ n' в ваш файл scanf.

0 голосов
/ 01 октября 2018

Как указано в комментарии (1) пользователя user3121023, вместо "% i" вместо "% i" решена проблема.Мне непонятно, почему.

Код сейчас:

// Get user input for the two dates:
printf("Enter Date #1 in format mm:dd:yyyy \n");
scanf("%d:%d:%d", &D1.month, &D1.day, &D1.year);

printf("Enter Date #2 in format mm:dd:yyyy\n");
scanf("%d:%d:%d", &D2.month, &D2.day, &D2.year);
...