Ниже приводится программой, которая принимает два символа и выводит ихзсапа() с различным спецификатором формата
#include<stdio.h>
int main()
{
char c1, c2;
printf("\n Enter characters one : ");
scanf(" %c", &c1);
printf("\n Enter character two : ");
scanf("%c", &c2);
printf("\n The the characters are %c and %c ", c1, c2);
return 0;
}
Теперь один экземпляр выхода: -
Enter two characters : a
The the characters are a and
Проблема заключается в том, что пристанище I» t задано любое пространство между двумя спецификаторами форматирования %c
Здесь я нажал 'a', а затем '\ n', который хранится в c1 и c2 соответственно. И таким образом я получил выход, который не был принят.
Я знаю, как исправить эту проблему.
Теперь я делаю ту же программу для целых чисел: -
#include<stdio.h>
int main()
{
int a, b;
printf("\n Enter two numbers : ");
scanf("%d%d", &a, &b);
printf("\n The two numbers are %d and %d ", a, b);
return 0;
}
Здесь мы не обнаружили никаких проблем.
Я думаю, что на этот раз мы не столкнулись с проблемой, потому что второй ввод, который мы даем, это '\n'
или пространство, которое не является целым числом, и поэтому мы получаем отказ при чтении из функции scanf()
, поэтому входной буфер по-прежнему активен и если мы нажмем следующий ввод как целое, то он будет сохранен в переменной 'b'
.
Можете ли вы рассказать мне причину, по которой я считал правильным, или нет?
Теперь, если это правильно, что произойдет, если я снова нажму символ. Затем он также не должен храниться в переменной 'b'
, но на этот раз 0 сохраняется в переменной 'b'
.
Так что мой вопрос заключается в том, что то, что является причиной для правильного поведения программы, когда я пытаюсь сделать ту же программу с %d
'зсапЕ ("% с", &c2);' -> 'зсапЕ ("% с", &c2);' с пространством так же, как в первом использовании Параметр '% формат d' пропускает пробелы, символ'% гр. 'format does not.' space' делает это так. –
Возможный дубликат [C: Несколько scanf, когда я ввожу значение для одного scanf, он пропускает второй scanf] (http://stackoverflow.com/questions/ 9562218/c-multiple-scanfs-when-i-enter-in-a-value-for-one-scanf-it-skips-the-second-s) –
нет, это не так ... Я прошел через это и после что я задал этот вопрос –