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);
}
根据您提供的代码,问题在于最后输出语句使用了%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);
}