我正在自己学习C,但这段代码对我来说似乎不对,
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
char name[20];
int p,c,m;
printf("Enter your name \n");
scanf(" %s", name);
if ( (name=='luv') || (name='pranav') )
{
printf("Enter your marks in pcm \n");
}
else
{
printf("get lost");
}
getch();
}
我希望只有在输入名称为luv
或pranav
时才能运行正确的代码,但正在发生的事情是,无论我输入什么名称,它都在运行其他代码,我是无法弄清楚原因。
我正在使用代码块作为编译器。
答案 0 :(得分:6)
您无法使用==
比较字符串,比较字符串,必须使用strcmp()
strcmp()
返回0
,否则返回这两个字符串的差异,
基本上,你的代码会变成,
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // for the strcmp() function
main()
{
char name[20];
int p,c,m;
printf("Enter your name \n");
scanf(" %s", name);
// strings are given inbetween double quotes
// characters are given inbetween single quotes
if ( !(strcmp(name, "luv")) || !(strcmp(name, "pranav")) )
{
printf("Enter your marks in pcm \n");
}
else
{
printf("get lost");
}
getch();
}
注意:强>
1)使用main()
int main(void) //if no command line arguments.
2)检查scanf()
等函数的返回。
答案 1 :(得分:3)
代码中有很多错误。
我正在尝试修复并显示:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> // to use strcmp
int main(void) // int and void added
{
char name[20];
int p,c,m;
printf("Enter your name \n");
scanf("%19s", name); // no space before % and 19 to limit input
if ( !strcmp(name,"luv") // " instead of ' , and strcmp with operator !
|| strcmp(name,"pranav") == 0 ) // instead of ! you can use == 0
{
printf("Enter your marks in pcm \n");
}
else
{
printf("get lost");
}
getch();
}
答案 2 :(得分:2)
main()
不是标准签名。您应该使用标准int main(void)
,除非您有特殊原因要使用非标准签名。'luv'
和'pranav'
是多字符字符常量,具有实现定义的值。您应该使用字符串文字和strcmp()
函数。name='pranav'
是一个赋值,你无法分配从数组转换的内容,因此会发出编译错误。试试这个:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char name[20];
int p,c,m;
printf("Enter your name \n");
scanf(" %19s", name);
if ( (strcmp(name, "luv") == 0) || (strcmp(name, "pranav") == 0) )
{
printf("Enter your marks in pcm \n");
}
else
{
printf("get lost");
}
getch();
}
如果不支持,请删除#include <conio.h>
和getch();
。
答案 3 :(得分:1)
两个问题:
==
进行比较。你实际在做的是将name
的第一个元素的地址与一个字符常量进行比较。即使你在常量上修改引号,你也要将name
的地址与字符串常量的地址进行比较,这些地址不相同。要比较字符串,请使用strcmp
,它会比较字符串中的每个字符。所以你想要的是这个:
if ( (strcmp(name,"luv") == 0) || (strcmp(name,"pranav") == 0) )
您还需要#include <string.h>
才能使用strcmp
。