реклама на сайте
подробности

 
 
> Задачка со scanf() printf(), взято с http://www.gowrikumar.com/c/
sigmaN
сообщение May 12 2010, 05:26
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



What is the differnce between the following function calls to scanf?(Please notice the space carefully in the second call. Try removing it and observe the behaviour of the program)

Код
#include <stdio.h>
  int main()
  {
      char c;
      scanf("%c",&c);
      printf("%c\n",c);

      scanf(" %c",&c);
      printf("%c\n",c);

      return 0;
  }
Почему без пробела не работает? blink.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sigmaN
сообщение May 12 2010, 08:01
Сообщение #2


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Вы не поняли.
Код
#include <stdio.h>
  int main()
  {
      char c;
      scanf("%c",&c);
      printf("%c\n",c);

      scanf(" %c",&c);
      printf("%c\n",c);

      return 0;
  }
input:1<enter>
output:1\n
input:2<enter>
output:2\n

Убираем пробел из формата чтобы было вот так
Код
#include <stdio.h>
  int main()
  {
      char c;
      scanf("%c",&c);
      printf("%c\n",c);

      scanf("%c",&c);
      printf("%c\n",c);

      return 0;
  }
input:1<enter>
output:1\n
больше inputа моего программа не ожидает. дважды проскакивает курсор(как-бы \n откудато) и всё.

Вот что я имел ввиду )))
Попробуйте, скомпильте.
Я думаю тут дело в том, что клавиша enter выдаёт сразу \r\n что-ли.
\r хавает scanf, а \n остаётся в буфере. Если следующий scanf без пробела - то этот \n залетает в char c; и тут же выводится(поэтому курсор проскакивает).
А если в формате есть пробел - этот лишний \n съедает пробел.. Только как такое может быть blink.gif
Да и enter вроде не должен два chara сразу выдавать... т.е. как-то непонятно до сих пор )


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 12 2010, 08:32
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sigmaN @ May 12 2010, 11:01) *
Я думаю тут дело в том, что клавиша enter выдаёт сразу \r\n что-ли.
Замените printf("%c" на printf("%02X " и легко проверите свое предположение.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016