鱼C论坛

 找回密码
 立即注册
查看: 1094|回复: 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) 语句清空键盘缓冲区,这样,就可以消除滞留换行符的影响了。

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

int main(void)
{
        FILE * fp                                              ;
        char  ch , filename[20]                                ;
        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")                             ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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                                              ;
        char  ch , filename[20]                                ;
        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")                             ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-22 16:44:03 | 显示全部楼层
感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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