user-0 提问: gets和getchar一起用的问题

回复:
user: user-0
content: quote=引用 13 楼 u013190272 的回复:] 引用 11 楼 u013160932 的回复:[quote=引用 8 楼 u013190272 的回复:] [quote=引用 7 楼 u013160932 的回复:] [quote=引用 4 楼 u013190272 的回复:] get语句把字符串后面的回车键吞掉了，所以c字符是给了b，c变量是\n。可以说，gets()会舍弃最后的回车符！ gets是以回车结束的吧,怎么会吞掉呢= =,还有舍弃了最后的回车是什么意思= =[/quote] 就是说回车键不会被下一个getchar（）捕获.[/quote] 为什么不会被下一个回车捕获?[/quote] 3楼的大神已经告诉你了。gets（）会把后面的回车键清楚掉不让b=getchar（）；接收。这是gets（）；的特点。[/quote] 原来是这样,懂了,谢谢各位了,分数没那么多,只能给几位大神了,不好意思啊[

user: user-1
content: 引用 11 楼 u013160932 的回复:[quote=引用 8 楼 u013190272 的回复:] [quote=引用 7 楼 u013160932 的回复:] [quote=引用 4 楼 u013190272 的回复:] get语句把字符串后面的回车键吞掉了，所以c字符是给了b，c变量是\n。可以说，gets()会舍弃最后的回车符！ gets是以回车结束的吧,怎么会吞掉呢= =,还有舍弃了最后的回车是什么意思= =[/quote] 就是说回车键不会被下一个getchar（）捕获.[/quote] 为什么不会被下一个回车捕获?[/quote] 3楼的大神已经告诉你了。gets（）会把后面的回车键清楚掉不让b=getchar（）；接收。这是gets（）；的特点。

user: user-1
content: 引用 10 楼 u013160932 的回复:[quote=引用 9 楼 u013190272 的回复:] #include <stdio.h> int main() {	 	char a[10],b,c; 	gets(a); 	scanf(" %c",&b); 	scanf(" %c",&c); 	printf("%s  %d  %d",a,b,c); 	return 0; } 我试了。、可以的。 C11标准7.21.6.2.5 A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. fscanf的格式串中有空格的话,就会跳过所有空字符(空格,tab键,回车)  如果格式串中没有空格, 则%c会读入任意字符, 参见c11标准7.21.6.2.8 好像scanf是可以,但是那个getchar怎么不行了[/quote] getchar（）；是不会跳过空白符（空格符，回车符，tab符）的，scanf（“ %c”）里面加空格就可以。

user: user-0
content: 引用 8 楼 u013190272 的回复:[quote=引用 7 楼 u013160932 的回复:] [quote=引用 4 楼 u013190272 的回复:] get语句把字符串后面的回车键吞掉了，所以c字符是给了b，c变量是\n。可以说，gets()会舍弃最后的回车符！ gets是以回车结束的吧,怎么会吞掉呢= =,还有舍弃了最后的回车是什么意思= =[/quote] 就是说回车键不会被下一个getchar（）捕获.[/quote] 为什么不会被下一个回车捕获?

user: user-0
content: 引用 9 楼 u013190272 的回复:#include <stdio.h> int main() {	 	char a[10],b,c; 	gets(a); 	scanf(" %c",&b); 	scanf(" %c",&c); 	printf("%s  %d  %d",a,b,c); 	return 0; } 我试了。、可以的。 C11标准7.21.6.2.5 A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. fscanf的格式串中有空格的话,就会跳过所有空字符(空格,tab键,回车)  如果格式串中没有空格, 则%c会读入任意字符, 参见c11标准7.21.6.2.8 好像scanf是可以,但是那个getchar怎么不行了

user: user-1
content: #include <stdio.h> int main() {	 	char a[10],b,c; 	gets(a); 	scanf(" %c",&b); 	scanf(" %c",&c); 	printf("%s  %d  %d",a,b,c); 	return 0; } 我试了。、可以的。 C11标准7.21.6.2.5 A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. fscanf的格式串中有空格的话,就会跳过所有空字符(空格,tab键,回车)  如果格式串中没有空格, 则%c会读入任意字符, 参见c11标准7.21.6.2.8

user: user-1
content: 引用 7 楼 u013160932 的回复:[quote=引用 4 楼 u013190272 的回复:] get语句把字符串后面的回车键吞掉了，所以c字符是给了b，c变量是\n。可以说，gets()会舍弃最后的回车符！ gets是以回车结束的吧,怎么会吞掉呢= =,还有舍弃了最后的回车是什么意思= =[/quote] 就是说回车键不会被下一个getchar（）捕获.

user: user-0
content: 引用 4 楼 u013190272 的回复:get语句把字符串后面的回车键吞掉了，所以c字符是给了b，c变量是\n。可以说，gets()会舍弃最后的回车符！ gets是以回车结束的吧,怎么会吞掉呢= =,还有舍弃了最后的回车是什么意思= =

user: user-0
content: 引用 3 楼 truelance 的回复:1. gets()本身会吸收回车, 所以不需要再跟一个吸收回车的 2. gets()一直就是c语言里臭名昭著各类编程规范严禁使用的函数, 而且在最新的c11标准中已经删除了gets(), 所以不要再使用了. 因为需要输出带有空格的字符串所以才用的gets,而且吸收空格是为了不让后面的%c捕获到空格

user: user-0
content: 引用 2 楼 ml0719787 的回复:scanf("%c")前面加个空格看看 scanf(" %c") 加空格也不行啊= =

user: user-1
content: get语句把字符串后面的回车键吞掉了，所以c字符是给了b，c变量是\n。可以说，gets()会舍弃最后的回车符！

user: user-2
content: 1. gets()本身会吸收回车, 所以不需要再跟一个吸收回车的 2. gets()一直就是c语言里臭名昭著各类编程规范严禁使用的函数, 而且在最新的c11标准中已经删除了gets(), 所以不要再使用了.

user: user-3
content: scanf("%c")前面加个空格看看 scanf(" %c")

user: user-3
content: 先占SF再看