首页 新闻 会员 周边 捐助

C语言字符串输出 后面会有方框产生

0
悬赏园豆:10 [已解决问题] 解决于 2020-03-18 12:30

这是PTA上的一道题目,题目链接

题目截图如下:

代码及详细注释如下:

#include <stdio.h>
#include <stdlib.h>
//自定义的结构体,用于存储每个学生的信息
struct inform{
    //准考证号
    char str[16];
    //试机座位号
    int num1;
    //考试座位号
    int num2;
};
int main()
{
    typedef struct inform Inform;
    //用户所输入的学生信息的个数
    int N;
    //用户输入的需要查询考试座位号的学生个数
    int M;
    //循环变量
    int i = 0, j = 0;
    //接收用户所输入的学生信息的个数
    scanf("%d",&N);
    //定义结构体数组,存储每个学生的详细信息
    Inform student[N];
    //通过循环依次录入每个学生的信息
    for (i = 0; i < N; i++)
    {
        //接收该学生的准考证号
        scanf("%s", student[i].str);
        //接收该学生的试机座位号
        scanf("%d", &student[i].num1);
        //接收该学生的考试座位号
        scanf("%d", &student[i].num2);
    }
    //接收用户输入的需要查询考试座位号的学生个数
    scanf("%d", &M);
    //用于接收用户输入的对应考生的待查询的试机座位号码的数组
    int flags[M];
    //依次对flags[M]赋值
    for (i = 0; i < M; i++)
    {
        scanf("%d", &flags[i]);
    }
    //通过for循环的嵌套来查找该学生的准考证号和考试座位号
    for (i = 0; i < M; i++)
    {
        for (j = 0; j < N; j++)
        {
            //判断是否为我们所需要查找的
            if(student[j].num1 == flags[i]) {
                //打印查找到的学生的准考证号和考试座位号,并且中间以空格隔开
                printf("%s %d\n", student[j].str,student[j].num2);

            }
        }
    }
    
    return 0;
}

我是通过结构体来做的,最后的输出结果是没有问题的,就是输出的格式出了问题,这是我的输出语句printf("%s %d\n", student[j].str,student[j].num2);

最后的输出结果如下:

陈太浪的主页 陈太浪 | 初学一级 | 园豆:138
提问于:2020-03-18 10:56
< >
分享
最佳答案
0

include<bits/stdc++.h>

using namespace std;
typedef long long ll;
struct STU
{
string n1;
int n2,n3;
} number;
int main()
{
int repeat;
scanf("%d",&repeat);
int i;
struct STU number[repeat];
for(i=0; i<repeat; i++)
{
cin>>number[i].n1>>number[i].n2>>number[i].n3;
}
int m;
cin>>m;
for(i=0; i<m; i++)
{
int a;
cin>>a;
int j;
for(j=0; j<repeat; j++)
{
if(number[j].n2==a)
{
cout<<number[j].n1<<" "<<number[j].n3<<endl;
}
}
}
}
这样就好了,用string代替char类型。
也可以把你代码中结构体里面的char str[16]改成str[17],其中字符串末尾还有一个结束符"\0",结束符也要占一位,所以至少是str[17],当然str[18]也可以。tips,最好去学一下c++。
你可以去看一下我的有一篇blog,https://www.cnblogs.com/jackwang-sparrow/p/12297344.html

收获园豆:10
Drophair | 菜鸟二级 |园豆:228 | 2020-03-18 11:42

好的,谢谢,我搞忘了C语言字符串的'\0' 需要占位,
还是基础没有打牢。

陈太浪 | 园豆:138 (初学一级) | 2020-03-18 12:30
其他回答(1)
0

不好意思,最近在忙其他事,没能及时回复你

wengle | 园豆:567 (小虾三级) | 2020-03-26 11:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册