Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的strcmp()有问题_C_String_Strcmp - Fatal编程技术网

C中的strcmp()有问题

C中的strcmp()有问题,c,string,strcmp,C,String,Strcmp,我已经做了几个小时了,这是为了测试我的理智 赋值是编写一个程序,当它读取一个名称时,它会检查给定结构的名称并查找匹配项,然后显示该结构中的其他数据。不管输入字符串大小写如何,它都应该工作,如果没有与名称匹配的内容,它应该告诉用户 当然,所有的编译都非常好,但是当我输入一个应该命中的名称时(因为它在结构中),它看不到它 我知道问题出在strcmp呼叫的某个地方 任何帮助都将不胜感激 #include <stdio.h> #include <conio.h> #include

我已经做了几个小时了,这是为了测试我的理智

赋值是编写一个程序,当它读取一个名称时,它会检查给定结构的名称并查找匹配项,然后显示该结构中的其他数据。不管输入字符串大小写如何,它都应该工作,如果没有与名称匹配的内容,它应该告诉用户

当然,所有的编译都非常好,但是当我输入一个应该命中的名称时(因为它在结构中),它看不到它

我知道问题出在strcmp呼叫的某个地方

任何帮助都将不胜感激

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>



typedef struct solar    
{
    char name[50];
    char type[50];
    double radius;
    double mass;
    double distsun;

}solar_obj;

void main()
{
    char input_name[50];

    solar_obj solarobj[] = { { "CERES", "DWARF PLANET", 471, 9.5E20, 413.7E6    },
                            { "EARTH", "PLANET", 6380, 5.974E24, 149.6E6 },
                            { "ERIS", "DWARF PLANET", 1163, 1.7E22, 10210E6 },   
                            { "HAUMEA", "DWARF PLANET", 650, 4E21, 6484E6 },
                            { "JUPITER", "PLANET", 71500, 1.899E27, 778.4E6 },    
                            { "MAKEMAKE", "DWARF PLANET", 715, 2.2E21, 6850E6 },
                            { "MARS", "PLANET", 3400, 6.419E23, 227.9E6 },
                            { "MERCURY", "PLANET", 2440, 3.302E23, 57.9E6 },
                            { "NEPTUNE", "PLANET", 24770, 1.024E26, 4498.3E6 },    
                            { "PLUTO", "DWARF PLANET", 1184, 1.3E22, 5906.4E6},
                            { "SATURN", "PLANET", 60270, 5.685E26, 1426.7E6 },
                            { "SUN", "STAR", 696000, 1.9891E30, 0 },
                            { "URANUS", "PLANET", 25560, 8.685E25, 2870.9E6 },  
                            { "VENUS", "PLANET", 6050, 4.869E24, 108.2E6 }
                          };

    printf("Please enter the name of the solar object:");

    fgets(input_name, sizeof(input_name), stdin);

    //to make all inputed string chars into uppercase
    for (int i = 0; input_name[i] != '\0'; i++){
        input_name[i] = toupper(input_name[i]);
    }

    //search through struct for matching name then print the data
    for (int j = 0; j < 14; j++)
        {
            if (strcmp(solarobj[j].name, input_name) == 0)
                {
                printf("\nObject name is :  %s \n", solarobj[j].name);
                printf("%s is a %s \n", solarobj[j].name, solarobj[j].type);
                printf("Radius (km) : %f \n ", solarobj[j].radius);
                printf("Mass (kg) : %f\n", solarobj[j].mass);
                printf("Distance from sun (km) : %f \n", solarobj[j].distsun);
                }

            else // if a name that doesnt match anything in the struct tell the user
            {
               if (j == 13){
                  printf("No objects in our solar system have the name: %s\n", input_name);
                  break;
               }    

               continue;
            }     
        }    


    getch();
}
#包括
#包括
#包括
#包括
typedef结构太阳能
{
字符名[50];
字符类型[50];
双半径;
双质量;
双蒸馏器;
}太阳能电池;
void main()
{
字符输入_名称[50];
太阳系(obj solarobj[]={{“谷神星”,“矮行星”,471,9.5e20413.7E6},
{“地球”,“行星”,63805.974e24149.6E6},
{“厄里斯”,“矮行星”,1163,1.7E22,10210E6},
{“HAUMEA”,“矮行星”,650,4E21,6484E6},
{“木星”,“行星”,71500,1.899E2778.4E6},
{“MAKEMAKE”,“矮行星”,715,2.2E21,6850E6},
{“火星”,“行星”,3400,6.419E23,227.9E6},
{“水星”,“行星”,2440,3.302E23,57.9E6},
{“海王星”,“行星”,24770,1.024E26,4498.3E6},
{“冥王星”,“矮行星”,1184,1.3E225906.4E6},
{“土星”,“行星”,60270,5.685E261426.7E6},
{“太阳”,“恒星”,696000,1.9891E30,0},
{“天王星”,“行星”,25560,8.685E252870.9E6},
{“金星”,“行星”,60504.869e24108.2E6}
};
printf(“请输入太阳物体的名称:”);
fgets(输入名称、sizeof(输入名称)、标准输入法);
//将所有输入的字符串字符转换为大写
对于(int i=0;输入_name[i]!='\0';i++){
输入名称[i]=toupper(输入名称[i]);
}
//在结构中搜索匹配的名称,然后打印数据
对于(int j=0;j<14;j++)
{
if(strcmp(solarobj[j].name,input_name)==0)
{
printf(“\n对象名称为:%s\n”,solarobj[j].name);
printf(“%s是一个%s\n”,solarobj[j]。名称,solarobj[j]。类型);
printf(“半径(km):%f\n”,solarobj[j].半径);
printf(“质量(kg):%f\n”,solarobj[j].质量);
printf(“与太阳的距离(km):%f\n”,solarobj[j].distsun);
}
else//如果名称与结构中的任何内容都不匹配,请告诉用户
{
如果(j==13){
printf(“我们太阳系中没有任何物体的名称为:%s\n”,输入\u名称);
打破
}    
继续;
}     
}    
getch();
}
首先,
fgets()
换行符保留在条目末尾。你可以这样处理它

char *strp = strchr(input_name, '\n');  // look for newline
if (strp) *strp = '\0';                 // terminate string
接下来,您可以使用
stricmp()
进行不区分大小写的比较

if (stricmp(solarobj[j].name, input_name) == 0)
你的循环可以简化成这样

int j;
for (j = 0; j < 14; j++)
{
    if (stricmp(solarobj[j].name, input_name) == 0)
        {
        printf("\nObject name is :  %s \n", solarobj[j].name);
        printf("%s is a %s \n", solarobj[j].name, solarobj[j].type);
        printf("Radius (km) : %f \n ", solarobj[j].radius);
        printf("Mass (kg) : %f\n", solarobj[j].mass);
        printf("Distance from sun (km) : %f \n", solarobj[j].distsun);
        break;
    }     
}    
if (j == 14)
    printf("No objects in our solar system have the name: %s\n", input_name);
intj;
对于(j=0;j<14;j++)
{
if(stricmp(solarobj[j].name,输入_name)==0)
{
printf(“\n对象名称为:%s\n”,solarobj[j].name);
printf(“%s是一个%s\n”,solarobj[j]。名称,solarobj[j]。类型);
printf(“半径(km):%f\n”,solarobj[j].半径);
printf(“质量(kg):%f\n”,solarobj[j].质量);
printf(“与太阳的距离(km):%f\n”,solarobj[j].distsun);
打破
}     
}    
如果(j==14)
printf(“我们太阳系中没有任何物体的名称为:%s\n”,输入\u名称);
请注意,我在循环外声明了
j
,因此当我测试是否找到匹配项时,其范围仍然有效。

首先,
fgets()
换行符保留在条目的末尾。你可以这样处理它

char *strp = strchr(input_name, '\n');  // look for newline
if (strp) *strp = '\0';                 // terminate string
接下来,您可以使用
stricmp()
进行不区分大小写的比较

if (stricmp(solarobj[j].name, input_name) == 0)
你的循环可以简化成这样

int j;
for (j = 0; j < 14; j++)
{
    if (stricmp(solarobj[j].name, input_name) == 0)
        {
        printf("\nObject name is :  %s \n", solarobj[j].name);
        printf("%s is a %s \n", solarobj[j].name, solarobj[j].type);
        printf("Radius (km) : %f \n ", solarobj[j].radius);
        printf("Mass (kg) : %f\n", solarobj[j].mass);
        printf("Distance from sun (km) : %f \n", solarobj[j].distsun);
        break;
    }     
}    
if (j == 14)
    printf("No objects in our solar system have the name: %s\n", input_name);
intj;
对于(j=0;j<14;j++)
{
if(stricmp(solarobj[j].name,输入_name)==0)
{
printf(“\n对象名称为:%s\n”,solarobj[j].name);
printf(“%s是一个%s\n”,solarobj[j]。名称,solarobj[j]。类型);
printf(“半径(km):%f\n”,solarobj[j].半径);
printf(“质量(kg):%f\n”,solarobj[j].质量);
printf(“与太阳的距离(km):%f\n”,solarobj[j].distsun);
打破
}     
}    
如果(j==14)
printf(“我们太阳系中没有任何物体的名称为:%s\n”,输入\u名称);
请注意,我在循环外声明了
j
,因此当我测试是否找到匹配项时,其范围仍然有效。

首先,
fgets()
换行符保留在条目的末尾。你可以这样处理它

char *strp = strchr(input_name, '\n');  // look for newline
if (strp) *strp = '\0';                 // terminate string
接下来,您可以使用
stricmp()
进行不区分大小写的比较

if (stricmp(solarobj[j].name, input_name) == 0)
你的循环可以简化成这样

int j;
for (j = 0; j < 14; j++)
{
    if (stricmp(solarobj[j].name, input_name) == 0)
        {
        printf("\nObject name is :  %s \n", solarobj[j].name);
        printf("%s is a %s \n", solarobj[j].name, solarobj[j].type);
        printf("Radius (km) : %f \n ", solarobj[j].radius);
        printf("Mass (kg) : %f\n", solarobj[j].mass);
        printf("Distance from sun (km) : %f \n", solarobj[j].distsun);
        break;
    }     
}    
if (j == 14)
    printf("No objects in our solar system have the name: %s\n", input_name);
intj;
对于(j=0;j<14;j++)
{
if(stricmp(solarobj[j].name,输入_name)==0)
{
printf(“\n对象名称为:%s\n”,solarobj[j].name);
printf(“%s是一个%s\n”,solarobj[j]。名称,solarobj[j]。类型);
printf(“半径(km):%f\n”,solarobj[j].半径);
printf(“质量(kg):%f\n”,solarobj[j].质量);
printf(“与太阳的距离(km):%f\n”,solarobj[j].distsun);
打破
}     
}    
如果(j==14)
printf(“我们太阳系中没有任何物体的名称为:%s\n”,输入\u名称);
注意,我在循环外部声明了
j
,因此当我测试是否找到匹配项时,它的作用域仍然有效。

首先,