C语言里的gets()函数功能是从输入缓存中读取多个字符,遇到回车符时,结束输入。
当使用gets()函数之前有过数据输入,并且,操作者输入了回车确认,这个回车符没有被清理,被保存在输入缓存中时,gets()会读到这个字符,结束读字符操作。因此,从用户表面上看,gets()没有起作用,跳过了。
解决办法:
方法一、在gets()前加fflush(stdin); //强行清除缓存中的数据(windows下可行)
方法二、根据程序代码,确定前面是否有输入语句,如果有,则增加一个getchar()命令,然后再调用 gets()命令。
方法三、检查输入结果,如果得到的字符串是空串,则继续读入,如:
char str[100]={0};
do {
gets(str);
} while( !str[0] );
#include <stdio.h>
char *gets(char *s);
Description
The gets function reads characters from the input stream pointed to by stdin,into the
array pointed to by s,until end-of-file is encountered or a new-line character is read.
Anynew-line character is discarded, and a null character is written immediately after the
last character read into the array.
Returns
The gets function returns s if successful. If end-of-file is encountered and no
characters have been read into the array,the contents of the array remain unchanged and a
null pointer is returned. If a read error occurs during the operation, the array contents are
indeterminate and a null pointer is returned.
以上是 C9899 的标准, 所以你的问题是输入的缓冲区中的回车符号造成的
解决的方法是:
#include <stdio.h>但是为什么接收文件那里不加getchar()也可以呢?谢谢!
scanf()不能接受回车吗?好像可以的吧?
因为你后面的输入是数字, 所以不符合输入的条件, 所以被系统丢掉了, 最好的是在使用scanf (原型 int scanf(const char * restrict format, ...)) 函数的后面都加上 fflush(stdin)(原型int fflush(FILE *stream))
或者你使用下面的输入格式
#include <stdio.h>但是为什么接收文件那里不加getchar()也可以呢?谢谢!
主要问题是scanf("%d",);的和gets函数混用,导致gets之前缓冲区里面有一个没有清除掉字符(回车),因此gets那句相当于直接回车掉了
谢谢采纳
scanf()不能接受回车吗?好像可以的吧?
追答不是scanf的问题。是在gets之前有用到scanf函数。
简单的说 你题目gets之前是scanf("%d",&m);的,你键盘输入一个数之后按回车,这个回车是会留到缓冲区的,所以执行代码值后发现是gets函数,gets是遇到换行就停止的,缓冲区里面有一个换行(回车),所以就直接停止跳过了
那么为什么这个回车是会留到缓冲区?为什么不能被scanf()一起接收呢?
追答给你指正一下:接收的是内存而不是函数。函数只是提供功能/接口而已
缓冲区就是一块内存。你输入的那么多东西都是进入缓冲区的
有些问题也没有为什么。就是那么设计的,或者说标准就是那么规定的