我正在编写代码以更好地理解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块。
答案 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.");
}