鱼C论坛

 找回密码
 立即注册
查看: 736|回复: 1

[已解决]一段代码的问题

[复制链接]
发表于 2020-9-5 16:19:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
捕获.PNG
最佳答案
2020-9-7 08:31:45
本帖最后由 巴巴鲁 于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-7 08:31:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 巴巴鲁 于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 06:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表