C语言中的嵌套if语句

4
我的代码需要执行3x2表中仅有的一种情况,即男性140到160厘米:矮,161到180厘米:中等;181到199厘米:高大;女性120到140厘米:矮,141到165厘米:中等和166到180厘米:高大。
例如,如果我输入153厘米的女性,输出只需是中等。但现在我的代码在输入153厘米女性时,最后会同时输出中等和高大。
如何编辑这个代码,以便仅针对两种组合情况(年龄和长度)中的一个情况,并且长度选项中的三个选项之一;例如,如果我输入153厘米的女性,它将需要仅显示中等。
#include <stdio.h>

int main()
{

    int length;
    char gender;

    printf("enter gender: ");
    scanf("%c", &gender);

    printf("enter length: ");
    scanf("%d", &length);

    if (gender == 'M' || 'm') {

        if (length <= 140 && length <= 160 ) {

            printf ("short");
        }

        if (length <= 161 && length <= 180 ) {

            printf ("medium");

        }

        if (length <= 181 && length <= 199 ) {

            printf ("tall");
        }

        if (gender == 'W' || gender == 'w') {

            if (length <= 120 || length <=140) {

                printf("short");

                if (length <=141 || length <=165) {

                    printf ("medium");

                    if (length <=166 || length <=180) {

                        printf ("tall");}

                        else {

                            printf("error");
                        }
                    }
                }
            }
        }



    return 0;
}

3
if (gender == 'M' || 'm')的条件始终为真。您是否想表达的是if (gender == 'M' || gender == 'm')?而且if (gender == 'W' || gender == 'w')将永远不会为真,因为它在检查性别为男性的if内部。此外,所有的length条件都是错误的。length <= 140 && length <= 160应该改为length >= 140 && length <= 160等。 - Spikatrix
仍然无法工作,我应该如何分离男性和女性块,我对花括号的使用感到困惑(即使在块内部)。 - kadir
if(gender == 'M' || gender == 'm') { /* length checks */ } else if(gender == 'W' || gender == 'w') { /* length checks */ } - Spikatrix
男性区块正常,但女性区块仍有问题。输出为:输入性别:女 输入长度:142 短中长 - kadir
谢谢,酷哥,现在它完美地工作了。我想为字符输入添加错误提示,除了w/W和m/M之外。我应该在哪里以及如何将else或else if放入我的代码块中? - kadir
显示剩余6条评论
3个回答

1

卡迪尔,你犯了一些错误,没关系。练习使人完美...!比较你的代码和我修改后的代码,并意识到错误。解释已经作为代码注释给出。

#include<stdio.h>

int main()
{

int length;
char gender;

printf("enter gender: ");
scanf("%c", &gender);

printf("enter length: ");
scanf("%d", &length);

if (gender == 'M' ||gender == 'm') { //comparison should be done in both sides of or

    if (length >= 140 && length <= 160 ) {

        printf ("short");
    }

    else if (length >= 161 && length <= 180 ) {

        printf ("medium");

    }

   else if (length >= 181 && length <= 199 ) {

        printf ("tall");
    }
}
 else if (gender == 'W' || gender == 'w') {
        if (length >= 120 && length <=140) {

            printf("short");
        }
          else  if (length >=141 && length <=165) { // & should be used.

                printf ("medium");
            }
              else  if (length >=166 && length <=180) {

                    printf ("tall");}

                    else {   /* if you are using else simply , it corresponds to the last if not all the if's in front so try using if else .*/

                        printf("error");
                    }
                }



return 0;
 }

祝你好运


1
以下行的长度必须大于等于161。 请检查类似的行。
   if (length <= 161 && length <= 180 ) {

        printf ("medium");

    }

谢谢,我会检查的。 - kadir

0
你需要在一个独占范围内比较长度。以下是代码:
#include <stdio.h>

int main()
{

int length;
char gender;

printf("enter gender: ");
scanf("%c", &gender);

printf("enter length: ");
scanf("%d", &length);

if (gender == 'M' || gender == 'm'){
    if (length <= 160 )
        printf ("short\n");
    if (161 <= length && length <= 180)
        printf ("medium\n");
    if (181 <= length && length <= 199)
        printf ("tall\n");

}

if (gender == 'W' || gender == 'w'){
    if (length <= 140) 
        printf ("short\n");
    if (141 <= length && length <= 165)
        printf ("medium\n");
    if (166 <= length && length <= 180)
        printf ("tall\n");
        if(length>=180)
        printf("error \n");
 }
 else if(gender != 'm'|| gender!='M'|| gender!='w'||gender!='W')
 printf("error");
 return 0;

}

还可以尝试使用 ctype 库中的 topper(gender) 或 tolower(gender) 函数 :) - xv8
谢谢,我该如何为错误的字符输入添加错误消息,即用户只能输入m/M或w/W。否则程序会显示错误。 - kadir
考虑使用 else if @reedx8 - Spikatrix
@kadir 加上一个else条件,包含你想要的错误信息。或许可以使用do-while循环将所有条件都包裹起来,直到用户输入w或m为止。因此,else{printf("这里是错误信息")} - xv8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接