c - Scanf does not read user input as expected -
the program not taking inputs should. when input t = 1
, l = 4
inner loop takes 2 inputs instead of four.
int main() { int l, b, g, count, t, i; char s[10000]; scanf("%d%d", &t, &l); while (t--) { (i = 0; < l; i++) { scanf("%c", s[i]); if (i > 0) if (s[i] == s[i-1]) count++; } printf("%d\n", count); } getch(); }
the problem when enter character scanf
, press enter key. input(if valid) consumed scanf
, newline character(since pressed enter key) stays in standard input stream(stdin
). when scanf
(with %c
) called next time, sees \n
character in stdin
, consumes it, , not wait further input.
to fix it, change
scanf("%c",s[i]);
to
scanf(" %c",&s[i]);
the space before %c
instructs scanf
scan number of whitespace characters including none, until first non-whitespace character. quoting standard:
7.21.6.2 fscanf function
[...]
- a directive composed of white-space character(s) executed reading input first non-white-space character (which remains unread), or until no more characters can read. directive never fails.
scanf
%c
format specifier expects char*
or in other words, address of char
. provide argument s[i]
of type char
. invokes undefined behavior. &
address of operator, , it, when used before s[i]
, gives address of s[i]
, char*
.
Comments
Post a Comment