输入if条件时,变量(char)不出现-C

我是C语言的新手,当尝试在NetBeans上构建此应用程序时,编译该函数时显然没有错误。但是,当用户输入姓名和性别时,应用程序通常会输入IFELSE IFELSE,但是当用户输入IFELSE IF时,用户名不会出现在printf()方法中。

#include <stdio.h>
#include <stdlib.h>

ex19(){
    char name[100];
    char genre;

    printf("Enter your name: ");
    scanf("%s",&name);

    printf("Enter your genre: ");
    scanf("%s",&genre);

    if (genre == 'M'){
        printf("%s you are a BOY",name);
    } 

    else if (genre == 'F'){
        printf("%s is GIRL",name);
    }

    else {
        printf("INVALID GENRE");
    }
}

main(){
    ex19();
}

此算法会出什么问题?对不起,很抱歉,我是C语言编程的新手,我冒着学习这种语言的风险,而无需看书或观看视频课程。现在,我之所以表现不错,是因为我以前对Java,JavaScript,PHP和C语言编程有所了解。但是无论如何,这段代码中发生了什么?

wsnfairy 回答:输入if条件时,变量(char)不出现-C

您已将name定义为字符数组。类型为array的变量的作用与指针非常相似。在scanf的{​​{1}}语句中,使用name,它是指向该数组的指针。太过分了。删除&。

,

此算法会出什么问题?

算法很好。...问题似乎源于

  • 变量存储在内存中的位置

  • 将变量genre声明为char(指定保留一个大小为一个字节的单个字符),并随后尝试将数据作为字符串读入其中scanf("%s",&genre);

说明:

执行代码后,genre的地址比数组char name[100];的地址早一个字节

输入名称后,该名称将按预期放置在字符数组name中。 流派的后续scanf将输入存储在流派的位置,但是因为%s格式说明符还添加了终止符NULL('\0')。该'NULL'字符将覆盖name中的第一个字符。现在name的第一个字符是'\0'字符。

解决方案:

可以修改scanf来读取单个字符scanf(" %c",&genre);%c之前的空格必须消耗newline字符)。

genre的声明更改为char genre[2];,以包含MFnewline字符和'\0'

希望这会有所帮助...

void ex19(){
  char name[100];
  char genre;

  printf("Enter your name: ");
  scanf("%s",name);

  printf("Enter your genre: ");
  scanf(" %c",&genre);//ignore whitespace characters and read a character

  if (genre == 'M'){
    printf("%s you are a BOY",name);
  } 

  else if (genre == 'F'){
    printf("%s is GIRL",name);
  }

  else {
    printf("INVALID GENRE");
  }
}

void ex19(){
  char name[100];
  char genre[2];//declare genre as a character array

  printf("Enter your name: ");
  scanf("%s",name);

  printf("Enter your genre: ");
  scanf("%s",&genre);

  if (*genre == 'M'){//deference genre...same as genre[0]
    printf("%s you are a BOY",name);
  } 

  else if (*genre == 'F'){//deference genre...same as genre[0]
    printf("%s is GIRL",name);
  }

  else {
    printf("INVALID GENRE");
  }
}
本文链接:https://www.f2er.com/3088003.html

大家都在问