不想起名字a 发表于 2021-1-18 15:03:17

c语言有关于getchar的问题,求助大佬

假定一个字符串ch
1.为什么在上一次输入完成后不使用ch=getchar()就会跳到下一行?
2.为什么要用ch接收scanf语句最后输入的回车符?
3.ch=getchar();
while(ch!='#')
{fputc(ch,fp);
putchar(ch);
ch=getchar();
}
为什么删去这个ch=getchar();就会输入无限多个前面从键盘输入的字符

jackz007 发表于 2021-1-18 15:14:21

本帖最后由 jackz007 于 2021-1-18 15:17 编辑

       scanf() 会遗留换行符在键盘缓冲区,这时,如果用 getchar() 或 gets() 等函数读取键盘输入时,会造成信息错位,解决方法是,在使用 getchar()、gets() 读取键盘输入之前,使用一条 fflush(stdin) 语句清空键盘缓冲区,这样,就可以消除滞留换行符的影响了。

       楼主再试试这个代码呢?
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
      FILE * fp                                              ;
      charch , filename                              ;
      printf("请输入所用的文件名 : ")                        ;
      scanf("%s" , filename)                                 ;
      if((fp = fopen(filename ,"w")) == NULL) {
                printf("无法打开文件\n")                     ;
                exit(0)                                        ;
      }
      fflush(stdin)                                          ;
      printf("请输入一个准备储存到磁盘的字符串(以#键结束):") ;
      while((ch = getchar()) !='#') fputc(ch , fp)         ;
      fclose(fp)                                             ;
      printf(" 信息保存完毕.\n")                           ;
}

不想起名字a 发表于 2021-1-22 16:44:03

感谢
页: [1]
查看完整版本: c语言有关于getchar的问题,求助大佬