六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 31|回复: 0

C语言 输入问题

[复制链接]

升级  49.33%

34

主题

34

主题

34

主题

秀才

Rank: 2

积分
124
 楼主| 发表于 2013-1-26 12:31:49 | 显示全部楼层 |阅读模式
下面程序用来描述我遇到的问题
希望第一次读buffer,c,第二次也从外部读取buffer,c,第三次......
可实际上第二次会直接忽略gets()

-----input.c---------
#include <stdio.h>#include <string.h>int main(int argc, char *argv[]){    char buffer[15];    char c;    do{        memset(buffer, 0, strlen(buffer));        gets(buffer);        scanf("%c",&c);    }while(1);}

编译:  gcc input.c  -o input -g

调试:  gdb input



输入c的值之后,进入下一次循环,情况是gets(buffer)直接被跳过
实际上,
scanf()以空格,TAB,回车换行作为输入结束,忽略回车符,但是将回车符留在缓冲区中。
gets()以回车换行作为输入结束,忽略回车符,同时将回车符踢出缓冲区,图片中buffer[0]!='\n'
说明gets()不读取回车符

上面程序可以这样修改:
c=getchar() //读取一个char字符
getchar() //读取回车符
或者
char temp[15]
gets(temp);   //剔除回车符   (这里char c  也可以直接用char c[1]代替)
sscanf(temp, "%c", &c);  // 将temp当作一个流,读取字符
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

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