Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
288 views
in Technique[技术] by (71.8m points)

c - Does scanf() take ' ' as input leftover from previous scanf()?

In the following C code:

char name[20];
int a;
int b;

for(i=0;i<10;i++)
{
    printf("
Enter name, a & b: ");
    scanf("%s %d %d",name,&a,&b);
}

does scanf read in the ' ' entered at the end of scanf() in 1st iteration, for the 2nd iteration inputs?

Question&Answers:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

scanf leaves the input stream pointing to the . In your case it doesn't make a difference: each time it's called, scanf will move along until it finds the next non-whitespace character. So giving it 10 lines of name, a, b as input will work as you expect.

But consider this:

scanf("%d", &a);
fgets(str, 20, stdin);

fgets reads until it finds the first newline character, so str will just get a value of , and fgets will not read the next line of input.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...