以下代码有什么问题?

时间:2016-06-12 14:29:14

标签: c

我正在自己学习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();
}

我希望只有在输入名称为luvpranav时才能运行正确的代码,但正在发生的事情是,无论我输入什么名称,它都在运行其他代码,我是无法弄清楚原因。

我正在使用代码块作为编译器。

4 个答案:

答案 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