之朝百 发表于 2020-9-5 16:19:50

一段代码的问题

本帖最后由 之朝百 于 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-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;
}
页: [1]
查看完整版本: 一段代码的问题