标题:想输入学生信息并输出,但是现在可以输入之后就报错退出
只看楼主
诗酒年华
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-9-11
结帖率:0
已结贴  问题点数:20 回复次数:6 
想输入学生信息并输出,但是现在可以输入之后就报错退出
#include <stdio.h>
#include <stdlib.h>
typedef struct{
    char name[20];
    char sex[5];
    int  age;
}ll;


int main()
{
    int t,i;
    ll a[t];
    printf("您要输入几个学生信息:姓名 性别 年龄\n");
    scanf("%d",&t);
    for(i=0;i<t;i++){
        scanf("%s%s%d",a[i].name,a[i].sex,&(a[i].age));
    }
    system("pause");
    printf("您输入的%d个生信息为:",t);
    for(i=0;i<t;i++){
        printf("%s %s %d\n",a[i].name,a[i].sex,a[i].age);
    }
    system("pause");
    return 0;
}
搜索更多相关主题的帖子: printf 学生信息 name int 输入 
2019-09-11 09:52
adssc
Rank: 2
等 级:论坛游民
威 望:1
帖 子:61
专家分:32
注 册:2018-4-20
得分:4 
程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct {
    char name[20];
    char sex[5];
    int  age;
}Student;

void inputStudent(Student[],int t);
void outputStudent(Student[],int t);

int  main()
{
    int t;
    Student s[] = { 0 };
    printf("您要輸入幾個學生信息:");
    scanf("%d", &t);

    inputStudent(s, t);
    outputStudent(s, t);

    return 0;
}

void inputStudent(Student s[], int t)
{
    int i = 0;
    while (i < t)
    {
        int j = 0;
        printf("輸入學生%d姓名:",j=i+1);
        scanf("%s", &s[i].name);
        printf("輸入學生%d性別:",j=i+1);
        scanf("%s", &s[i].sex);
        printf("輸入學生%d年齡:",j=i+1);
        scanf("%d", &s[i].age);
        i++;
    }
}

void outputStudent(Student s[], int t)
{
    int i = 0;
    printf("所有學生的信息\n");
    while (i < t)
    {
        int j = 0;
        j = i + 1;
        printf("您輸入的%d個學生%d信息為:%s,%s,%d\n", t, j, s[i].name, s[i].sex, s[i].age);
        i++;
    }
}
2019-09-11 12:01
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:4 
几个字符串的输入,最好是单独输入并加以区分,毕竟没有规定那个字符为结束标志(至少编译运行时没那么智能)
2019-09-14 07:47
云不喜
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:16
注 册:2019-8-25
得分:4 
scanf("%s%s%d",a[i].name,a[i].sex,&(a[i].age));
上面这一语句中,如果楼主输入    张三 男 55   再输入    李四 男 22
结果在程序运行时这些全部会读入第一个%s中从而导致后面的全部没有读取到
具体报错我就不太清楚了
不过楼主可以使用%s(空格)%s(空格)%d先调试一下

收获越多,动力越大!
2019-09-14 17:35
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:4 

程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
    char name[20];
    char sex[5];
    int  age;
}ll;


int main()
{
    int t,i;
    ll a[t];   //我个人有两三年没有写C语言的程序了。我记得刚学的时候我们老师强调,C语言声明数组必须用常量,因为在程序运行的时候他就要给每个变量分配内存,这里你用了一个未初始化的变量t去声明数组,,编译器居然也能不报错???
    printf("您要输入几个学生信息:姓名 性别 年龄\n");
    scanf("%d",&t);  //你有没有考虑过在执行这个scanf之前t的值是多少?那个数组a[]的大小是多少?我猜是零。不如你在这行之前添加一个printf("**%d**",t);输出看看。如果我猜对了,那你的报错就是因为这个了
    for(i=0;i<t;i++){
        scanf("%s%s%d",a[i].name,a[i].sex,&(a[i].age));//这里涉及到两个连续的字符串读入操作,推荐分成两个scanf写。因为你现在这么写,那么调试运行的时候就必须严格一个字符串(一个空格/一个回车)一个字符串(一个空格/一个回车)一个整数
    }
    system("pause");
    printf("您输入的%d个生信息为:",t);
    for(i=0;i<t;i++){
        printf("%s %s %d\n",a[i].name,a[i].sex,a[i].age);
    }
    system("pause");
    return 0;
}




φ(゜▽゜*)♪
2019-09-16 01:18
c小白2333
Rank: 5Rank: 5
来 自:中国
等 级:贵宾
威 望:11
帖 子:121
专家分:367
注 册:2019-6-17
得分:4 
回复 5楼 书生牛犊
他这个报错了
a[]定义时里面必须是常量
这点非常重要
这是一个非常重要基础的问题了
楼主一定要注意了

宝剑锋从磨砺出,梅花香自苦寒来。
2019-09-16 19:23
yuelaiyuehei
Rank: 2
等 级:论坛游民
威 望:1
帖 子:12
专家分:15
注 册:2008-4-17
得分:4 
给结构体成员赋值要带结构体名.的,赋值要用符号&
2019-09-17 23:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496779-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.102313 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved