scanf与空格的问题

smile_life 2011-05-10 09:00:53
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<time.h>
void main(){
int guess,number,count;
char yes='Y';
while(toupper(yes)=='Y'){
srand(time(0));
number=rand()%100;
count=0;
do{
do{
printf("\n input the number you guess between 1 and 100 \n");
scanf("%d",&guess);
}while(!(guess>=1&&guess<=100));

if(guess<number){
printf("the number you guess is lower than the random number");
count++;
}
if(guess>number){
printf("the number you guess is bigger than the random number");
count++;
}

if(count==15){
printf("you have no chance,try again");
exit(0);
}

}while(guess!=number);

if(count<=7){
printf("good job");
printf("\n %d\n",count);
}
else{
printf("\n you have pass this game");
printf("\n %d",count);
}
printf("\n NEXT?(Y/N): ");
scanf(" %c",&yes); }

}
对于红线部分,也就是最后一句,我很不明白为什么要在%c前面加一个空格,望高手指点,谢谢
...全文
576 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxlzll 2012-01-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 axlfly 的回复:]

忘了说了,scanf 函数,如果需要获得带有喊 空格的 字符串,代码如下:
scanf("%[\n]",&xxxxxxxx); //直到 “回车” 才停止 scanf
[/Quote]

应该是
scanf("%[^\n]",&xxxxxxxx)
jxhs89 2011-07-20
  • 打赏
  • 举报
回复
scanf是虑掉空格的,只接受空格前面的字段
张小毛 2011-05-11
  • 打赏
  • 举报
回复
虽然我不懂楼主说什么,但我想楼主应该很NB
ljhhh0123 2011-05-11
  • 打赏
  • 举报
回复
回五楼:
C标准并没有规定fflush(stdin)这个stdin参数,你建议的是非标准的,所以楼主的空格法是可移植的.
KevinHo 2011-05-10
  • 打赏
  • 举报
回复
因为scanf()这个函数是靠回车换行符来返回的
所以回车换行符会留存在缓冲区内,fflush的作用就是刷新缓冲区,使里面得内容得到清空
adaLyx 2011-05-10
  • 打赏
  • 举报
回复
忘了说了,scanf 函数,如果需要获得带有喊 空格的 字符串,代码如下:
scanf("%[\n]",&xxxxxxxx); //直到 “回车” 才停止 scanf
adaLyx 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hnhbwyf 的回复:]
fflush 是什么函数?
[/Quote]
清楚缓存区的函数
fflush
Flushes a stream.

int fflush( FILE *stream );

Function Required Header Compatibility
fflush <stdio.h> ANSI, Win 95, Win NT
hnhbwyf 2011-05-10
  • 打赏
  • 举报
回复
fflush 是什么函数?
辰岡墨竹 2011-05-10
  • 打赏
  • 举报
回复
scanf里空白字符是空格、制表符、回车、换行等字符,它们之间是可以相互匹配的,而且是贪婪性的,比如一个空格可以匹配连续的几个空白字符。
adaLyx 2011-05-10
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<time.h>
void main(){
int guess,number,count;
char yes='Y';
while(toupper(yes)=='Y'){
srand(time(0));
number=rand()%100;
count=0;
do{
do{
printf("\n input the number you guess between 1 and 100 \n");
scanf("%d",&guess);// 这里的SCANF用后会在缓存区留有数据当第2次SCANF时,如果缓存区中有数据,会直接读取建议用 fflush(stdin);(头文件)#include<stdio.h>
}while(!(guess>=1&&guess<=100));

if(guess<number){
printf("the number you guess is lower than the random number");
count++;
}
if(guess>number){
printf("the number you guess is bigger than the random number");
count++;
}

if(count==15){
printf("you have no chance,try again");
exit(0);
}

}while(guess!=number);

if(count<=7){
printf("good job");
printf("\n %d\n",count);
}
else{
printf("\n you have pass this game");
printf("\n %d",count);
}
printf("\n NEXT?(Y/N): ");
scanf(" %c",&yes); }这里的空格不太明白,如果加上fflush的话,这里的空格有没有,都没有影响

}


另外说下: scanf函数中 % 后面,必须带 字符宽度,否者,可以利用它,溢出。
無_1024 2011-05-10
  • 打赏
  • 举报
回复
是为刷新缓冲区的类似作用 在前面加一个fflush(stdin)
c_losed 2011-05-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ww884203 的回复:]

你前面输入的时候有一个\n留在了输入流中,一个空格是为了把它读掉吧,相当于
fflush(stdin);
[/Quote]
++
ww884203 2011-05-10
  • 打赏
  • 举报
回复
你前面输入的时候有一个\n留在了输入流中,一个空格是为了把它读掉吧,相当于
fflush(stdin);
xiaoguangzaia 2011-05-10
  • 打赏
  • 举报
回复
不加有什么问题?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧