user-0 提问: C语言简单问题

回复:
user: user-1
content: 引用 19 楼 u010510926 的回复:年龄用double，年龄有小数哒？ 这孩子还不足月。

user: user-2
content: 年龄用double，年龄有小数哒？

user: user-3
content: 根据C标准，fflush(stdout)有定义，而fflush(stdin)则是没有明确定义的；也就是说各个编译器自己看着办。 有定义的，也有不定义的，因此这个的行为是“不定”，严重影响移植。

user: user-4
content: mark   为什么%c前面加一个空格可以解决以上问题

user: user-0
content: 引用 15 楼 lin5161678 的回复:[quote=引用 14 楼 u012271055 的回复:] 对了，我上次问了老师，老师说加在%c前面加一个空格可以解决以上问题，我试过了，可以解决，不过是在C语言中试的！其实有点不理解，老师要我别用ffush(stdin)! 老师的建议的对的  fflush 刷新输出流  stdin是输入流 不一定能用  [/quote]  那么加一个空格是为什么呢？是个什么原理？可以解释一下么？谢谢！！

user: user-5
content: 引用 14 楼 u012271055 的回复:对了，我上次问了老师，老师说加在%c前面加一个空格可以解决以上问题，我试过了，可以解决，不过是在C语言中试的！其实有点不理解，老师要我别用ffush(stdin)! 老师的建议的对的  fflush 刷新输出流  stdin是输入流 不一定能用

user: user-0
content: 引用 9 楼 linbounconstraint 的回复:菜鸟，我写的有问题，还没找出来，求高手。 输入age后，参数没传到in_age里，怎么传啊？  #include <stdio.h>  void in_age(int age) {	 	char choose; 	if(age >= 18) 	{ 		printf("该网站你可以进入\n"); 	} 	else 	{ 		printf("如果想进入请输入Y，不想进入请输入N\n"); 		scanf("%c",&choose); 		if('Y' == choose) 		{ 			printf("SUCCESS\n"); 		} 		else 		{   			printf("FALSE\n");  		} 	} }  int main(void) {	 	int a; 	printf("请输入你的年龄:\n"); 	in_age(scanf("%d\n",&a)); 	//in_age(12); 	return 0; }  引用 11 楼 lin5161678 的回复:scanf(" %c",&choose); 加一个空格在%c前面   对了，我上次问了老师，老师说加在%c前面加一个空格可以解决以上问题，我试过了，可以解决，不过是在C语言中试的！其实有点不理解，老师要我别用ffush(stdin)!

user: user-6
content: #include <stdio.h> void in_age(int age) {	 	char choose; 	if(age >= 18) 	{ 		printf("该网站你可以进入\n"); 	} 	else 	{ 		printf("如果想进入请输入Y，不想进入请输入N\n"); 		fflush(stdin); //fllush是刷新缓冲区 		choose = getchar(); 		if('Y' == choose) 		{ 			printf("SUCCESS\n"); 		} 		else 		{   			printf("FALSE\n");  		} 	} }  int main(void) {	 	int a; 	printf("请输入你的年龄:\n"); 	scanf("%d",&a); 	in_age(a); 	//in_age(12); 	return 0; } 这样更好。

user: user-6
content: 这个可以运行。 我发了一贴。你可以看看。 http://bbs.csdn.net/topics/390617771?page=1#post-395816239 #include <stdio.h> void in_age(int age) {	 	char choose; 	if(age >= 18) 	{ 		printf("该网站你可以进入\n"); 	} 	else 	{ 		printf("如果想进入请输入Y，不想进入请输入N\n"); 		fflush(stdin); //fllush是刷新缓冲区 		choose = getchar(); 		if('Y' == choose) 		{ 			printf("SUCCESS\n"); 		} 		else 		{   			printf("FALSE\n");  		} 	} }  int main(void) {	 	int a; 	printf("请输入你的年龄:\n"); 	in_age(scanf("%d",&a)); 	//in_age(12); 	return 0; }

user: user-5
content: scanf(" %c",&choose); 加一个空格在%c前面

user: user-6
content: 菜鸟俩字。我是说我是菜鸟 ，lz不要误会。

user: user-6
content: 菜鸟，我写的有问题，还没找出来，求高手。 输入age后，参数没传到in_age里，怎么传啊？  #include <stdio.h>  void in_age(int age) {	 	char choose; 	if(age >= 18) 	{ 		printf("该网站你可以进入\n"); 	} 	else 	{ 		printf("如果想进入请输入Y，不想进入请输入N\n"); 		scanf("%c",&choose); 		if('Y' == choose) 		{ 			printf("SUCCESS\n"); 		} 		else 		{   			printf("FALSE\n");  		} 	} }  int main(void) {	 	int a; 	printf("请输入你的年龄:\n"); 	in_age(scanf("%d\n",&a)); 	//in_age(12); 	return 0; }

user: user-7
content: 引用 7 楼 u012271055 的回复:[quote=引用 4 楼 max_min_ 的回复:] [quote=引用 3 楼 u012271055 的回复:] [quote=引用 2 楼 buyong 的回复:] void main() { double age;     char choose; printf("请输入你的年龄:"); fflush(stdin); scanf("%lf",&age); if(age>=18){ printf("该网站你可以进入."); }else{ printf("如果想进入请输入Y，不想进入请输入N\n"); fflush(stdin); scanf("%c",&choose); if(choose=='Y'){ printf("SUCCESS"); }else{ printf("FALSE"); } }  }   谢谢你！我用了一下午的时间都没想通，这个fflush我不懂。呵呵，谢谢！[/quote] 那是因为你在第一次输入年级的时候，有一个回车符还在输入缓冲区中！ 当后面输入的时候直接赋值给choose了，所以没有输入！ fllush是刷新缓冲区！ 也可以用getchar()吃点那个没有用的回车符！[/quote]  那个printf（"请输入你的年龄:"）里面我没有用'\n'啊！为什么下一行还用fflush(stdin)清除缓存数据，那清除的这个缓存数据是什么呢？这个缓存数据是系统赋给变量age的初值吗？ 还有就是scanf("%c",&choose)这一行上面的清除缓存数据的指令fflush(stdin)清除的缓存数据就是printf("")里面的换行缓存数据吗？ 还有那个fflush(stdout)又是个啥！！！ 谢谢谢谢，您的回复！[/quote]  fflush(stdout)是清空输出缓冲区，一般会输出到屏幕。 和它相似的还有一个fflush(stdin)是清空输入缓冲区，一般会丢弃掉。

user: user-0
content: 引用 4 楼 max_min_ 的回复:[quote=引用 3 楼 u012271055 的回复:] [quote=引用 2 楼 buyong 的回复:] void main() { double age;     char choose; printf("请输入你的年龄:"); fflush(stdin); scanf("%lf",&age); if(age>=18){ printf("该网站你可以进入."); }else{ printf("如果想进入请输入Y，不想进入请输入N\n"); fflush(stdin); scanf("%c",&choose); if(choose=='Y'){ printf("SUCCESS"); }else{ printf("FALSE"); } }  }   谢谢你！我用了一下午的时间都没想通，这个fflush我不懂。呵呵，谢谢！[/quote] 那是因为你在第一次输入年级的时候，有一个回车符还在输入缓冲区中！ 当后面输入的时候直接赋值给choose了，所以没有输入！ fllush是刷新缓冲区！ 也可以用getchar()吃点那个没有用的回车符！[/quote]  那个printf（"请输入你的年龄:"）里面我没有用'\n'啊！为什么下一行还用fflush(stdin)清除缓存数据，那清除的这个缓存数据是什么呢？这个缓存数据是系统赋给变量age的初值吗？ 还有就是scanf("%c",&choose)这一行上面的清除缓存数据的指令fflush(stdin)清除的缓存数据就是printf("")里面的换行缓存数据吗？ 还有那个fflush(stdout)又是个啥！！！ 谢谢谢谢，您的回复！

user: user-1
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-8
content: void main() { double age;     char choose; printf("请输入你的年龄:"); fflush(stdin); scanf("%lf",&age); if(age>=18){ printf("该网站你可以进入."); }else{ printf("如果想进入请输入Y，不想进入请输入N\n"); fflush(stdin); scanf(" %c",&choose);//加个空格 if(choose=='Y'){ printf("SUCCESS"); }else{ printf("FALSE"); } }  }

user: user-9
content: 引用 3 楼 u012271055 的回复:[quote=引用 2 楼 buyong 的回复:] void main() { double age;     char choose; printf("请输入你的年龄:"); fflush(stdin); scanf("%lf",&age); if(age>=18){ printf("该网站你可以进入."); }else{ printf("如果想进入请输入Y，不想进入请输入N\n"); fflush(stdin); scanf("%c",&choose); if(choose=='Y'){ printf("SUCCESS"); }else{ printf("FALSE"); } }  }   谢谢你！我用了一下午的时间都没想通，这个fflush我不懂。呵呵，谢谢！[/quote] 那是因为你在第一次输入年级的时候，有一个回车符还在输入缓冲区中！ 当后面输入的时候直接赋值给choose了，所以没有输入！ fllush是刷新缓冲区！ 也可以用getchar()吃点那个没有用的回车符！

user: user-0
content: 引用 2 楼 buyong 的回复:void main() { double age;     char choose; printf("请输入你的年龄:"); fflush(stdin); scanf("%lf",&age); if(age>=18){ printf("该网站你可以进入."); }else{ printf("如果想进入请输入Y，不想进入请输入N\n"); fflush(stdin); scanf("%c",&choose); if(choose=='Y'){ printf("SUCCESS"); }else{ printf("FALSE"); } }  }   谢谢你！我用了一下午的时间都没想通，这个fflush我不懂。呵呵，谢谢！

user: user-10
content: void main() { double age;     char choose; printf("请输入你的年龄:"); fflush(stdin); scanf("%lf",&age); if(age>=18){ printf("该网站你可以进入."); }else{ printf("如果想进入请输入Y，不想进入请输入N\n"); fflush(stdin); scanf("%c",&choose); if(choose=='Y'){ printf("SUCCESS"); }else{ printf("FALSE"); } }  }

user: user-11
content: 不知道想说啥？