|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 之朝百 于 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[i] != '\n' && st[i] != '\0')
- i++;
- if (st[i] == '\n')
- st[i] = '\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;
- }
复制代码
|
|