if / else语句未验证数据

时间:2019-01-12 13:52:22

标签: c if-statement

我正在编写代码以更好地理解if / else语句,但是在尝试验证字符串时遇到问题(感谢C语言的帮助)

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

int main(){

    char nametype[100];

    printf("Enter the name type (firstname/lastname): ");
    scanf("%s", &nametype);
    script1(nametype);

    return 0;
}

void script1(nametype){

    char firstname[100];
    int age;
    char typename[100];

    if(nametype == "firstname"){
        char typename[100] = "first name.";
    }

    if(nametype == "lastname"){
        char typename[100] = "last name.";
    } else {
        printf("You must enter the correct parameters! \n");
        main();
    }

    printf("Enter your name: ");
    scanf("%s", &firstname);
    printf("Enter your age: ");
    scanf("%d", &age);
    printf("Hey! Your %s is %s, you're %d \n", typename, firstname, age);
}

我希望代码在第一个输入中输入“ firstname”或“ lastname”之后继续进行到最后,但相反,它总是继续进行到else块。

2 个答案:

答案 0 :(得分:3)

您有一个基本的误解,即==运算符的作用。

它不比较字符串。它比较指针。如果你写

char a[100] = "Hello";
char b[100] = "Hello";

然后在比较指针时a == b。 a是指向数组a的指针,b是指向数组b的指针,指针不同,比较为假。

使用strcmp。

PS。仅凭这一点并不能使您的代码正常工作,因为您正在嵌套块中创建一个名为“ typename”的 second 变量。这是与外部块中的typename不同的变量,因此这将毫无用处。

答案 1 :(得分:0)

if(nametype == "firstname"){
    char typename[100] = "first name.";
}

在这种情况下,nametype与一个char数组“ firstname”进行比较,因此您必须使用strcmp(str1,str2)函数。要使用此函数,必须使用标头。如果两个字符串相等,则返回0。像这样

if(strcmp(nametype,"firstname")==0){
    // char typename[100] = "first name.";//
}

在if条件下,您使用了已经声明的typename变量,因此无需重新声明此变量。 在C语言中,它不支持直接字符串或char数组分配。因此,您必须使用strcpy(destination,source)函数。因此代码将如下所示:

if(strcmp(nametype,"firstname")==0){
    strcpy(typename,"first name.");
}