鱼C论坛

 找回密码
 立即注册
查看: 1206|回复: 2

[已解决]c语言有关于getchar的问题,求助大佬

[复制链接]
发表于 2021-1-18 15:03:17 | 显示全部楼层 |阅读模式

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

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

x
假定一个字符串ch
1.  为什么在上一次输入完成后不使用ch=getchar()就会跳到下一行?
2.  为什么要用ch接收scanf语句最后输入的回车符?
3.  ch=getchar();
while(ch!='#')
{fputc(ch,fp);
putchar(ch);
ch=getchar();
}
为什么删去这个ch=getchar();就会输入无限多个前面从键盘输入的字符
最佳答案
2021-1-18 15:14:21
本帖最后由 jackz007 于 2021-1-18 15:17 编辑

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

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

  3. int main(void)
  4. {
  5.         FILE * fp                                              ;
  6.         char  ch , filename[20]                                ;
  7.         printf("请输入所用的文件名 : ")                        ;
  8.         scanf("%s" , filename)                                 ;
  9.         if((fp = fopen(filename ,"w")) == NULL) {
  10.                 printf("无法打开文件\n")                       ;
  11.                 exit(0)                                        ;
  12.         }
  13.         fflush(stdin)                                          ;
  14.         printf("请输入一个准备储存到磁盘的字符串(以#键结束):") ;
  15.         while((ch = getchar()) !='#') fputc(ch , fp)           ;
  16.         fclose(fp)                                             ;
  17.         printf(" 信息保存完毕.\n")                             ;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-18 15:14:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-18 15:17 编辑

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

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

  3. int main(void)
  4. {
  5.         FILE * fp                                              ;
  6.         char  ch , filename[20]                                ;
  7.         printf("请输入所用的文件名 : ")                        ;
  8.         scanf("%s" , filename)                                 ;
  9.         if((fp = fopen(filename ,"w")) == NULL) {
  10.                 printf("无法打开文件\n")                       ;
  11.                 exit(0)                                        ;
  12.         }
  13.         fflush(stdin)                                          ;
  14.         printf("请输入一个准备储存到磁盘的字符串(以#键结束):") ;
  15.         while((ch = getchar()) !='#') fputc(ch , fp)           ;
  16.         fclose(fp)                                             ;
  17.         printf(" 信息保存完毕.\n")                             ;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-22 16:44:03 | 显示全部楼层
感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-2 11:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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