c语言scanf读入字符串,scanf()%d读取字符串有关问题

scanf()%d读取字符串问题

cpp上p204,遇到一个问题,想不明白。求指点。谢谢。

int get_int(void)

{

int input;

char ch;

while (scanf("%d", &input) != 1)

{

while ((ch = getchar()) != '\n')

putchar(ch);  // dispose of bad input

printf(" is not an integer.\nPlease enter an ");

printf("integer value, such as 25, -178, or 3: ");

}

return input;

}

考虑如下所示的一行输入:

is  28  12.4

“如果get_int()遇到这一行,将读取并丢弃整行,包括数字,因为这些数字只是该行中的字符而已。”

这里有点不理解,为什么28、12.4没有读入?我是这样想的,scanf()函数在读取第一个字符为非数字字符,会把字符放回输入,但是下次不会从该字符读取了,因为这个字符通过while()语句清除了,就这样所以当scanf()扫描到28或12.4的时候,就会读入成功返回。

c输入

------解决方案--------------------

scanf() 发现 input buffer 中的内容与格式不匹配,会将此内容留在 input buffer 中, 被

while ((ch = getchar()) != '\n') 读取

------解决方案--------------------

#include 

char s[]="123 ab 4";

char *p;

int v,n,k;

void main() {

p=s;

while (1) {

k=sscanf(p,"%d%n",&v,&n);

printf("k,v,n=%d,%d,%d\n",k,v,n);

if (1==k) {

p+=n;

} else if (0==k) {

printf("skip char[%c]\n",p[0]);

p++;

} else {//EOF==k

break;

}

}

printf("End.\n");

}

//k,v,n=1,123,3

//k,v,n=0,123,3

//skip char[ ]

//k,v,n=0,123,3

//skip char[a]

//k,v,n=0,123,3

//skip char[b]

//k,v,n=1,4,2

//k,v,n=-1,4,2

//End.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值