一段代码的问题
本帖最后由 之朝百 于 2020-9-5 16:21 编辑教材说这段代码会丢弃剩余字符,我不明白, 在fgets()执行的时候不就已经把输入写入数组了吗,已经写入那缓冲区是不是就空了(没有溢出的话),空的缓冲区为啥还能用getchar()丢弃剩余字符
char * s_gets(char * st, int n)
{
char * ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val) // 即,ret_val != NULL
{
while (st != '\n' && st != '\0')
i++;
if (st == '\n')
st = '\0';
else
while (getchar() != '\n')
continue;
}
return ret_val;
}
本帖最后由 巴巴鲁 于 2020-9-8 07:05 编辑
做一个简单的程序,你看看是不是这个意思
#include <stdio.h>
int main(void)
{
int a;
printf("请输入一个整数:");
scanf("%d",&a);
printf("a = %d\n",a);
// 此时没有getchar()来缓冲输入的回车符
char c;
printf("请输入一个字符:");
scanf("%c",&c);
printf("c = %c\n", c);
// 这段因为没有把输入的回车缓冲掉,程序会认为用户输入的回车为你下一个想输的字符
// 此时有getchar()来缓冲输入的回车符
getchar();
char ch;
printf("请输入一个字符:");
scanf("%c",&ch);
printf("ch = %c\n", ch);
return 0;
}
页:
[1]