%s跟%c对于键盘缓冲区的不同的处理
%s和%c对于键盘缓冲区的不同的处理
这样可以正常读入并显示两个字符串。
但是这样会多读出一个'\n'。
这样实际上只会输入一次。
我想问的是是不是只有%c才会有这种古怪的特性?以及getchar与%c是不是没有什么不同?看样子%s没有清除结尾的'\n',那就是新的%s会忽略前面的'\n'?
我只要答案,出现任何形式说教的回复都一分不给。我现在满脑子都是二级C,别烦我!
------解决方案--------------------
getchar每次读入一个字符,包括'\n','\0'之类。而%s是字符串输出
------解决方案--------------------
scanf( "%c\n", b );这样就不会接收回车了!
------解决方案--------------------
用scanf( "%c", &a );就不接收回车了
------解决方案--------------------
%s - 忽略控制台输入字符串前后的'\n'和' '
%c - 取缓冲区指针指向的第一个字符.
------解决方案--------------------
%c肯定是会有这个问题的,因为%c是一个字符一个字符读入的,而空格、tab、和回车等都会被读入。当你输入一串字符的时候,首先读入一个字符,然后其他的放在缓存区,等待下次读入。这个问题只在连续输入字符的时候出现。解决办法:
在下次输入%c的前面加fflush(stdio),用于清除缓存区;
- C/C++ code
#include <stdio.h> int main() { char b[30]; char c[30]; printf( "Input b:\n" ); scanf( "%s", &b ); printf( "Input c:\n" ); scanf( "%s", c ); printf( "%s\n%s\n", b, c ); return 0; }
这样可以正常读入并显示两个字符串。
- C/C++ code
#include <stdio.h> int main() { char a; char b[30]; char c[30]; printf( "Input b:\n" ); scanf( "%s", &b ); printf( "Input c:\n" ); scanf( "%s", c ); printf( "Input a:\n" ); scanf( "%c", &a ); printf( "%s\n%s\n%c\n", b, c, a ); return 0; }
但是这样会多读出一个'\n'。
- C/C++ code
#include <stdio.h> int main() { char a; char b[30]; printf( "Input a:\n" ); scanf( "%c", &a ); printf( "Input b:\n" ); scanf( "%s", b ); printf( "%c\n%s\n", a, b ); return 0; }
这样实际上只会输入一次。
我想问的是是不是只有%c才会有这种古怪的特性?以及getchar与%c是不是没有什么不同?看样子%s没有清除结尾的'\n',那就是新的%s会忽略前面的'\n'?
我只要答案,出现任何形式说教的回复都一分不给。我现在满脑子都是二级C,别烦我!
------解决方案--------------------
getchar每次读入一个字符,包括'\n','\0'之类。而%s是字符串输出
------解决方案--------------------
scanf( "%c\n", b );这样就不会接收回车了!
------解决方案--------------------
用scanf( "%c", &a );就不接收回车了
------解决方案--------------------
%s - 忽略控制台输入字符串前后的'\n'和' '
%c - 取缓冲区指针指向的第一个字符.
------解决方案--------------------
%c肯定是会有这个问题的,因为%c是一个字符一个字符读入的,而空格、tab、和回车等都会被读入。当你输入一串字符的时候,首先读入一个字符,然后其他的放在缓存区,等待下次读入。这个问题只在连续输入字符的时候出现。解决办法:
在下次输入%c的前面加fflush(stdio),用于清除缓存区;