关于#c语言#的问题,请各位专家解答!

c语言求问,为什么最后什么都输出不出来,代码有什么问题吗

#include<stdio.h>
struct loc
{
    char c;
    int l;
    int d;
}s[1000][3];

int main()
{
    int N,i,S,h=0;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%s %d %d",&s[i][0].c,&s[i][1].l,&s[i][2].d);
    }
    S=(s[0][1].l)*(s[0][2].d);
    for(i=1;i<N;i++)
    {
        if((s[i][1].l)*(s[i][2].d)>S)
        {
            S=(s[i][1].l)*(s[i][2].d);
            h=i;
        }
    }
    printf("%s",s[h][0].c);
}

img

根据您提供的代码,问题在于最后输出语句使用了%s格式化符,但是s[h][0].c是一个字符类型,应该使用%c格式化符。修改后的代码如下:


#include<stdio.h>
struct loc
{
    char c;
    int l;
    int d;
}s[1000][3];
 
int main()
{
    int N,i,S,h=0;
    scanf("%d",&N);
    for(i=0;i<N;i++)
    {
        scanf("%s %d %d",&s[i][0].c,&s[i][1].l,&s[i][2].d);
    }
    S=(s[0][1].l)*(s[0][2].d);
    for(i=1;i<N;i++)
    {
        if((s[i][1].l)*(s[i][2].d)>S)
        {
            S=(s[i][1].l)*(s[i][2].d);
            h=i;
        }
    }
    printf("%c",s[h][0].c);
    return 0;
}

另外,建议在scanf函数中使用%c格式化符读取字符类型的数据,而不是%s格式化符。

从输出看,程序崩溃了
结构体中的c应该是字符串,你定义成了字符类型,是不对的,改为:
char c[100];这样子才行,具体数组大小可以根据你实际需要输入的字符串最大长度来调整

两处修改,供参考:

#include<stdio.h>
struct loc
{
    char c[32]; // char c; 修改
    int l;
    int d;
}s[1000][3];

int main()
{
    int N, i, S, h = 0;
    scanf("%d", &N);
    for (i = 0; i < N; i++)
    {
        scanf("%s %d %d", s[i][0].c, &s[i][1].l, &s[i][2].d);   // 修改
        //scanf("%s %d %d", &s[i][0].c, &s[i][1].l, &s[i][2].d);
    }
    S = (s[0][1].l) * (s[0][2].d);
    for (i = 1; i < N; i++)
    {
        if ((s[i][1].l) * (s[i][2].d) > S)
        {
            S = (s[i][1].l) * (s[i][2].d);
            h = i;
        }
    }
    printf("%s", s[h][0].c);
}