c - 如何在C编程中控制 'char'类型的用户输入?

标签 c string io char scanf

如何在C编程中控制用户对char类型的输入??

问题:如果用户将“男性”作为第一个输入,那么程序不会要求提供“年龄”

输出

输入性别(男/女):男

输入年龄:

您的性别是男(M)

你的年龄:71//垃圾值

#include <stdio.h>

int main()
{
    char gender;
    int age;

    printf("\nEnter gender(M/F):");
    scanf("%c", &gender);

    printf("\nEnter age:");
    scanf("%d", &age);

    if(gender=='M'){
        printf("\nYour Gender is Male(%c)",gender);
    }else{
        printf("\nYour Gender is not Male(%c)",gender);
    }

    printf("\nYour Age a:%d",age);

    return 0;
}

预期输出:如果用户输入 'Male'/'Female'/'M'/'F' 然后按回车键 然后控制台会要求提供年龄

输入性别(男/女):男

输入年龄:23​​

你的性别是男(M)//基于&gender

您的年龄:23​​

最佳答案

你想读取一个字符串,但你正在使用一个字符,所以将你的代码更改为:

char gender[7];
scanf("%6s", gender);
...
if (gender[0] == 'm' || gender[0] == 'M')
    printf("\nYour Gender is Male(%c)", gender[0]);
...

第二种方案:

只需使用 fgets()对于性别,因为您希望能够读取一个字符串,然后是年龄的 scanf(),如下所示:

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

int main()
{
    char gender[7];
    printf("Enter gender(M/F): ");
    if (!(fgets(gender, sizeof(gender), stdin) != NULL)) {
        fprintf(stderr, "Error reading Gender.\n");
        exit(1);
    }
    gender[strcspn(gender, "\n")] = 0;
    int age;
    printf("\nEnter age:");
    scanf("%d", &age);

    if (gender[0] == 'm' || gender[0] == 'M')
        printf("\nYour Gender is Male(%c)", gender[0]);
    else if (gender[0] == 'f' || gender[0] == 'f')
        printf("\nYour Gender is Female(%c)", gender[0]);
    else
        printf("Unrecocognized gender\n");
    printf("\nYour Age is: %d\n",age);

    return 0;
}

输出:

Enter gender(M/F): f
Enter age: 25
Your Gender is Female(f)
Your Age is: 25

关于c - 如何在C编程中控制 'char'类型的用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46860939/

相关文章:

c# - 该进程无法访问该文件,因为它正被另一个使用 streamwriter 的进程使用

c - fwprintf : only the first character from a wide char array argument gets copied to output

c - fwrite() 如何在 c 文件中工作?

c++ - 如何将位串存储在数组中?

c - C中的长双数据类型问题

java - 如何在 java String.ValueOf 中格式化 float

javascript - typeof 2D 数组将变为 String。为什么?

java - 在java中连接到共享驱动器

c - 使用GDateTime代替localtime_r

java - 如何从字符串java中提取 double 或整数