user-0 提问: 求教C语言小程序

回复:
user: user-1
content: #include <stdio.h> int main() {     int age;     float W=0.0;     float H=0.0;     char str,choice;      do     {         printf("请输入年龄：");         scanf("%d",&age);         printf("请输入性别(男m/女f):");         //scanf("%s",&str);         getchar();    //for '\n'         scanf("%c",&str);         printf("请输入身高：");         scanf("%f",&H);         printf("请输入体重：");         scanf("%f",&W);         if(age<18||age>40)             break;         else         {             if(str=='f'){                 if(W<H-112.0)                     printf("您的体型偏瘦，注意增肥！！！");                 else if(W>H-108.0)                     printf("您的体型偏胖，注意减肥！！！");                 else                     printf("您的体型完美，注意保持！！！");             }             if(str=='m'){                 if(W<H-102.0)                     printf("您的体型偏瘦，注意增肥！！！");                 else if(W>H-98.0)                     printf("您的体型偏胖，注意减肥！！！");                 else                     printf("您的体型完美，注意保持！！！");             }             printf("\n");         }         printf("是否继续(y/n):");         //scanf("%s",&choice);         getchar();    //for '\n'         scanf("%c",&choice);         printf("\n");     }while(choice=='y'||choice=='Y');     return 0; } 供参考！   引用 1 楼 小先生吖 的回复:emmmmm，我看了一下你的代码，然后，到了那个判断体重的范围的时候，我就有点晕了。 所以，我自己写了一下，你可以看看，其中那个判断体重的话，用了一下简单粗暴的计算方法，其中对age也进行了判断，不过我的那个break的话，就是直接结束程序了，如果你想提示用户重新输入一个符合标准的数的话，可以用一下continue，或者不用这么麻烦的话，直接在输入年龄的提示那里加一个（age>=18&&age<=40） 对于身高和体重的话，用int定义不太好吧，身高可能不一定是整数呀，当然，如果没有特殊要求的话，还是可以用int，毕竟简单粗暴！然后这个小程序的话，也就是用do-while循环，可能你出错的就是在这里？？？？因为我看了一下你的那个循环的话，while定义在循环里面？？？或者你可以再改改。再就是输入字符的时候，你用的是%d，虽然不是很大的问题，并且整型和字符也是可以互相转换，但是对于强迫症的我，还是提醒一下！ 如果有写错的地方，还请谅解呀！ #include <stdio.h> int main(){ 	int age; 	float W=0.0; 	float H=0.0; 	char str,choice; 	do 	{ 	printf("请输入年龄："); 	scanf("%d",&age); 	printf("请输入性别(男m/女f):"); 	scanf("%s",&str); 	printf("请输入身高："); 	scanf("%f",&H); 	printf("请输入体重："); 	scanf("%f",&W); 	if(age<18||age>40) 		break; 	else 	{ 		if(str=='f'){ 		if(W<H-112.0) 			printf("您的体型偏瘦，注意增肥！！！"); 		else if(W>H-108.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		if(str=='m'){ 		if(W<H-102.0) 			printf("您的体型偏瘦，注意增肥！！！"); 	    else if(W>H-98.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		printf("\n"); 	} 	printf("是否继续(y/n):"); 	scanf("%s",&choice); 	printf("\n"); 	}while(choice=='y'||choice=='Y'); return 0; }  代码有问题，已经修复，供参考！

user: user-2
content: 中间的的判断太辣眼睛了 H - W >= 98 && H - W <= 102 最后的scanf应该是%c

user: user-3
content: 引用 2 楼 拥抱Linux 的回复:「体型偏肥」？ 哈哈，太打击人了！  不要一次测试两个人么

user: user-1
content: 引用 8 楼 小先生吖 的回复:不好意思，输入字符我用scanf函数不行吗？我也知道字符串输入函数getchar（），而％c本来就可以用来字符的输入，你大可给我改一下%c，强硬的语气谁都不喜欢的呦 没有强硬哦，自己写的代码别人指出来，发现问题并改正这才是重点吧，而不是对方的态度。别人的态度不好，就不解决问题了吗？  另外，输入用scanf没问题，但是这里有一个陷阱（%c)，需要注意下，建议你测试一下去掉getchar();的结果。

user: user-4
content: 不好意思，输入字符我用scanf函数不行吗？我也知道字符串输入函数getchar（），而％c本来就可以用来字符的输入，你大可给我改一下%c，强硬的语气谁都不喜欢的呦

user: user-1
content: 引用 6 楼 小先生吖 的回复:[quote=引用 5 楼 自信男孩 的回复:] #include <stdio.h> int main() {     int age;     float W=0.0;     float H=0.0;     char str,choice;      do     {         printf("请输入年龄：");         scanf("%d",&age);         printf("请输入性别(男m/女f):");         //scanf("%s",&str);         getchar();    //for '\n'         scanf("%c",&str);         printf("请输入身高：");         scanf("%f",&H);         printf("请输入体重：");         scanf("%f",&W);         if(age<18||age>40)             break;         else         {             if(str=='f'){                 if(W<H-112.0)                     printf("您的体型偏瘦，注意增肥！！！");                 else if(W>H-108.0)                     printf("您的体型偏胖，注意减肥！！！");                 else                     printf("您的体型完美，注意保持！！！");             }             if(str=='m'){                 if(W<H-102.0)                     printf("您的体型偏瘦，注意增肥！！！");                 else if(W>H-98.0)                     printf("您的体型偏胖，注意减肥！！！");                 else                     printf("您的体型完美，注意保持！！！");             }             printf("\n");         }         printf("是否继续(y/n):");         //scanf("%s",&choice);         getchar();    //for '\n'         scanf("%c",&choice);         printf("\n");     }while(choice=='y'||choice=='Y');     return 0; } 供参考！   [quote=引用 1 楼 小先生吖 的回复:] emmmmm，我看了一下你的代码，然后，到了那个判断体重的范围的时候，我就有点晕了。 所以，我自己写了一下，你可以看看，其中那个判断体重的话，用了一下简单粗暴的计算方法，其中对age也进行了判断，不过我的那个break的话，就是直接结束程序了，如果你想提示用户重新输入一个符合标准的数的话，可以用一下continue，或者不用这么麻烦的话，直接在输入年龄的提示那里加一个（age>=18&&age<=40） 对于身高和体重的话，用int定义不太好吧，身高可能不一定是整数呀，当然，如果没有特殊要求的话，还是可以用int，毕竟简单粗暴！然后这个小程序的话，也就是用do-while循环，可能你出错的就是在这里？？？？因为我看了一下你的那个循环的话，while定义在循环里面？？？或者你可以再改改。再就是输入字符的时候，你用的是%d，虽然不是很大的问题，并且整型和字符也是可以互相转换，但是对于强迫症的我，还是提醒一下！ 如果有写错的地方，还请谅解呀！ #include <stdio.h> int main(){ 	int age; 	float W=0.0; 	float H=0.0; 	char str,choice; 	do 	{ 	printf("请输入年龄："); 	scanf("%d",&age); 	printf("请输入性别(男m/女f):"); 	scanf("%s",&str); 	printf("请输入身高："); 	scanf("%f",&H); 	printf("请输入体重："); 	scanf("%f",&W); 	if(age<18||age>40) 		break; 	else 	{ 		if(str=='f'){ 		if(W<H-112.0) 			printf("您的体型偏瘦，注意增肥！！！"); 		else if(W>H-108.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		if(str=='m'){ 		if(W<H-102.0) 			printf("您的体型偏瘦，注意增肥！！！"); 	    else if(W>H-98.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		printf("\n"); 	} 	printf("是否继续(y/n):"); 	scanf("%s",&choice); 	printf("\n"); 	}while(choice=='y'||choice=='Y'); return 0; }  代码有问题，已经修复，供参考！[/quote]  代码不能说是有问题，你对我进行的是代码精简一点的改动！吓得我以为我写错了！[/quote]   这样的代码scanf("%s",&str);还没问题吗？ 注意str定义的是char类型，而你用的是%s格式输入，只要输入一个字符就已经越界了，因为字符串还要有'\0'，也算一个字符。

user: user-4
content: 引用 5 楼 自信男孩 的回复:#include <stdio.h> int main() {     int age;     float W=0.0;     float H=0.0;     char str,choice;      do     {         printf("请输入年龄：");         scanf("%d",&age);         printf("请输入性别(男m/女f):");         //scanf("%s",&str);         getchar();    //for '\n'         scanf("%c",&str);         printf("请输入身高：");         scanf("%f",&H);         printf("请输入体重：");         scanf("%f",&W);         if(age<18||age>40)             break;         else         {             if(str=='f'){                 if(W<H-112.0)                     printf("您的体型偏瘦，注意增肥！！！");                 else if(W>H-108.0)                     printf("您的体型偏胖，注意减肥！！！");                 else                     printf("您的体型完美，注意保持！！！");             }             if(str=='m'){                 if(W<H-102.0)                     printf("您的体型偏瘦，注意增肥！！！");                 else if(W>H-98.0)                     printf("您的体型偏胖，注意减肥！！！");                 else                     printf("您的体型完美，注意保持！！！");             }             printf("\n");         }         printf("是否继续(y/n):");         //scanf("%s",&choice);         getchar();    //for '\n'         scanf("%c",&choice);         printf("\n");     }while(choice=='y'||choice=='Y');     return 0; } 供参考！   [quote=引用 1 楼 小先生吖 的回复:] emmmmm，我看了一下你的代码，然后，到了那个判断体重的范围的时候，我就有点晕了。 所以，我自己写了一下，你可以看看，其中那个判断体重的话，用了一下简单粗暴的计算方法，其中对age也进行了判断，不过我的那个break的话，就是直接结束程序了，如果你想提示用户重新输入一个符合标准的数的话，可以用一下continue，或者不用这么麻烦的话，直接在输入年龄的提示那里加一个（age>=18&&age<=40） 对于身高和体重的话，用int定义不太好吧，身高可能不一定是整数呀，当然，如果没有特殊要求的话，还是可以用int，毕竟简单粗暴！然后这个小程序的话，也就是用do-while循环，可能你出错的就是在这里？？？？因为我看了一下你的那个循环的话，while定义在循环里面？？？或者你可以再改改。再就是输入字符的时候，你用的是%d，虽然不是很大的问题，并且整型和字符也是可以互相转换，但是对于强迫症的我，还是提醒一下！ 如果有写错的地方，还请谅解呀！ #include <stdio.h> int main(){ 	int age; 	float W=0.0; 	float H=0.0; 	char str,choice; 	do 	{ 	printf("请输入年龄："); 	scanf("%d",&age); 	printf("请输入性别(男m/女f):"); 	scanf("%s",&str); 	printf("请输入身高："); 	scanf("%f",&H); 	printf("请输入体重："); 	scanf("%f",&W); 	if(age<18||age>40) 		break; 	else 	{ 		if(str=='f'){ 		if(W<H-112.0) 			printf("您的体型偏瘦，注意增肥！！！"); 		else if(W>H-108.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		if(str=='m'){ 		if(W<H-102.0) 			printf("您的体型偏瘦，注意增肥！！！"); 	    else if(W>H-98.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		printf("\n"); 	} 	printf("是否继续(y/n):"); 	scanf("%s",&choice); 	printf("\n"); 	}while(choice=='y'||choice=='Y'); return 0; }  代码有问题，已经修复，供参考！[/quote] 代码不能说是有问题，你对我进行的是代码精简一点的改动！吓得我以为我写错了！

user: user-5
content: 「体型偏肥」？ 哈哈，太打击人了！

user: user-4
content: emmmmm，我看了一下你的代码，然后，到了那个判断体重的范围的时候，我就有点晕了。 所以，我自己写了一下，你可以看看，其中那个判断体重的话，用了一下简单粗暴的计算方法，其中对age也进行了判断，不过我的那个break的话，就是直接结束程序了，如果你想提示用户重新输入一个符合标准的数的话，可以用一下continue，或者不用这么麻烦的话，直接在输入年龄的提示那里加一个（age>=18&&age<=40） 对于身高和体重的话，用int定义不太好吧，身高可能不一定是整数呀，当然，如果没有特殊要求的话，还是可以用int，毕竟简单粗暴！然后这个小程序的话，也就是用do-while循环，可能你出错的就是在这里？？？？因为我看了一下你的那个循环的话，while定义在循环里面？？？或者你可以再改改。再就是输入字符的时候，你用的是%d，虽然不是很大的问题，并且整型和字符也是可以互相转换，但是对于强迫症的我，还是提醒一下！ 如果有写错的地方，还请谅解呀！ #include <stdio.h> int main(){ 	int age; 	float W=0.0; 	float H=0.0; 	char str,choice; 	do 	{ 	printf("请输入年龄："); 	scanf("%d",&age); 	printf("请输入性别(男m/女f):"); 	scanf("%s",&str); 	printf("请输入身高："); 	scanf("%f",&H); 	printf("请输入体重："); 	scanf("%f",&W); 	if(age<18||age>40) 		break; 	else 	{ 		if(str=='f'){ 		if(W<H-112.0) 			printf("您的体型偏瘦，注意增肥！！！"); 		else if(W>H-108.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		if(str=='m'){ 		if(W<H-102.0) 			printf("您的体型偏瘦，注意增肥！！！"); 	    else if(W>H-98.0) 			printf("您的体型偏胖，注意减肥！！！"); 		else 			printf("您的体型完美，注意保持！！！"); 		} 		printf("\n"); 	} 	printf("是否继续(y/n):"); 	scanf("%s",&choice); 	printf("\n"); 	}while(choice=='y'||choice=='Y'); return 0; }