[c语言] 谭浩强书中一个例子的问题。万分感谢!!1
发布网友
发布时间:2023-10-18 13:49
我来回答
共6个回答
热心网友
时间:2023-12-05 04:40
不是1楼说的原因,因为你先用getchar()读入了c,且getchar只读入一个字符,而之后你要输一个回车,这时候后面一句gets()就把回车读给了str,所以此时str的内容就是一个回车(换行符),所以会发现在程序结束时,上面有一行空白行,其实就是已经将str的回车输出了。
你试着在c = getchar() ;
enter_string(str);
这两句中间加一句getchar(),就可以了。
热心网友
时间:2023-12-05 04:40
因为getchar()只读取一个字符,但你在输入空格的时候是先按空格然后按回车,所以回车也算是一个输入,结果就是getchar()把空格从输入流中取走了,只剩下一个回车
然后gets()函数读入数据时也是依靠回车界定的,所以就直接读到了回车符号'\0',所以结果就是str中存储的只有一个'\0',其字符串长度为0,后边的delete_string(str,c);print_string(str);都执行了,不过执行后的结果依旧为'\0',所以只是输出一个空行,就好像直接结束一样
可以用scanf("%c\n", &c);来代替getchar(),或者连用c=getchar();getchar();即连用两个getchar()以去掉回车符号
热心网友
时间:2023-12-05 04:40
空格,回车是两个字符。
c = getchar() ; //空格由c接收。
enter_string(str); //回车由str接收。
热心网友
时间:2023-12-05 04:41
因为gets是个很蠢的函数, 如果“当前字符”是个回车的话它就认为读入直接结束
热心网友
时间:2023-12-05 04:42
getchar() ; 获取一个字符
gets(str); 获取一个字符串,以回车为结束标志.
你改了顺序以后,空格被getchar()接受了,没错的.回车由gets(str); 接受了,所以相当于获取可一个空字符串.
你别输入回车,直接输入空格和你想输入的字符串,然后再回车
热心网友
时间:2023-12-05 04:42
这是一个输入输出流的问题,gets、getchar这些函数是到输入流里拿数据而不是直接到终端键盘拿数据(其实跟你的问题没多大关系),你出现问题的地方在于gets跟getchar的实现:
gets会到输入流里读取字符流直到遇到EOF或者换行符,换行符会在读取之后被舍弃并替换成字符串结束符'\0',而getchar是直接到流里读取一个字符,也就是说你颠倒后的程序在getchar执行后流里还有一个换行符,当你再使用gets读取字符串时读取到的第一字符就是上次剩下的换行符。