有人能帮我看看这个该要怎么改吗 我运行不出来

void input_information()
{
    printf("\n请输入您需要录入的学生数量:");
    int number;
    scanf("%d",&number);
    printf("\n");
    
    char student[number][5];//姓名 性别 年龄 学号 学院 
    
    int i,j;
    for(i=0;i<number;i++)
    {
        for(j=0;j<5;j++){    
        
        switch(j){
            case 0:
                printf("请输入学生姓名:\n");
                break;
            case 1:
                printf("请输入学生性别:\n");
                break;
            case 2:
                printf("请输入学生年龄:\n");
                break;
            case 3:
                printf("请输入学生学号\n");
                break;
            case 4:
                printf("请输入学生学院:\n");
                break;
        }
        
        scanf("%s",&student[i][j]);
        printf("\n");
        }    
        system("cls");
    }
    
    input(student[number][5]);
    printf("录入成功!");
}
int input(char s[100][100])
{ 
    

    FILE *fp_input= fopen("D:\\c\\class.txt","w");
    
    if(fp_input==NULL){
        
        printf("无法打开输入文件!\n");
        return 0;
    }
    
    int i1,j1;
    for(i1=0;i1<100;i1++){
        
        for(j1=0;j1<100;j1++){
            fprintf(fp_input,"%s",student[i][j]);
        
        }
        printf("\n");
        fprintf(fp_input,"\n");
    }
    
       fclose(fp_input);
       
       return 1;
}

img

TechWhizKid参考GPT回答:

  • 几个问题:
  1. 学生信息数组的定义不正确。这里定义了一个二维数组 char student[number][5];。 第二个维度 5 表示每个字符串的长度,对于学生的姓名、性别、年龄、学号、学院这些信息,长度为 5 显然是不够的。如果这是一个字符串数组,你应该定义一个合适的长度。并且,C 语言在栈上分配数组时不允许使用变量作为数组的大小。

  2. input 函数接收的应该是学生信息的二维数组以及学生的数量,而不是一个固定大小的二维数组。

  3. input 函数中,你试图访问 student[i][j],但是 student 在这个函数中没有定义。

根据上述的问题,我修改了你的代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX_STUDENT 100  // 最大的学生数量
#define INFO_NUM 5  // 学生的信息数量(姓名、性别、年龄、学号、学院)
#define INFO_LEN 100  // 每个信息的最大长度

// 输入学生信息
void input_information(char student[MAX_STUDENT][INFO_NUM][INFO_LEN], int *number)
{
    printf("\n请输入您需要录入的学生数量:");
    scanf("%d", number);
    printf("\n");
    
    for(int i=0;i<*number;i++)
    {
        for(int j=0;j<INFO_NUM;j++)
        {    
            switch(j){
                case 0:
                    printf("请输入学生姓名:\n");
                    break;
                case 1:
                    printf("请输入学生性别:\n");
                    break;
                case 2:
                    printf("请输入学生年龄:\n");
                    break;
                case 3:
                    printf("请输入学生学号\n");
                    break;
                case 4:
                    printf("请输入学生学院:\n");
                    break;
            }
            
            scanf("%s",student[i][j]);
            printf("\n");
        }    
        system("cls");
    }
}

// 将学生信息写入文件
int write_to_file(char student[MAX_STUDENT][INFO_NUM][INFO_LEN], int number)
{ 
    FILE *fp_input= fopen("D:\\c\\class.txt","w");
    
    if(fp_input==NULL){
        printf("无法打开输入文件!\n");
        return 0;
    }
    
    for(int i=0;i<number;i++){
        for(int j=0;j<INFO_NUM;j++){
            fprintf(fp_input,"%s ",student[i][j]);
        }
        fprintf(fp_input,"\n");
    }
    
    fclose(fp_input);
    
    return 1;
}

int main()
{
    char student[MAX_STUDENT][INFO_NUM][INFO_LEN];  // 用于存储学生信息的三维数组
    int number;  // 学生数量
    
    // 输入学生信息
    input_information(student, &number);
    
    // 将学生信息写入文件
    if(write_to_file(student, number)){
        printf("录入成功!\n");
    }
    
    return 0;
}

这个版本的程序应该可以工作。

void input_information()
{
    printf("\n请输入您需要录入的学生数量:");
    int number;
    scanf("%d", &number);
    printf("\n");
    
    char student[number][5]; // 姓名 性别 年龄 学号 学院 
    
    int i, j;
    for (i = 0; i < number; i++)
    {
        for (j = 0; j < 5; j++)
        {    
            switch (j)
            {
                case 0:
                    printf("请输入学生姓名:\n");
                    break;
                case 1:
                    printf("请输入学生性别:\n");
                    break;
                case 2:
                    printf("请输入学生年龄:\n");
                    break;
                case 3:
                    printf("请输入学生学号:\n");
                    break;
                case 4:
                    printf("请输入学生学院:\n");
                    break;
            }
        
            scanf("%s", &student[i][j]);
            printf("\n");
        }    
        system("cls");
    }
    
    input(student);
    printf("录入成功!");
}

int input(char s[][5])
{ 
    FILE *fp_input = fopen("D:\\c\\class.txt", "w");
    
    if (fp_input == NULL)
    {
        printf("无法打开输入文件!\n");
        return 0;
    }
    
    int i1, j1;
    for (i1 = 0; i1 < number; i1++)
    {
        for (j1 = 0; j1 < 5; j1++)
        {
            fprintf(fp_input, "%s", s[i1][j1]);
        }
        printf("\n");
        fprintf(fp_input, "\n");
    }
    
    fclose(fp_input);
       
    return 1;
}

修改如下,改动处见注释,供参考:

#include <stdio.h>
#define N 100    // 人数
#define M 5      //姓名 性别 年龄 学号 学院
int input(char s[N][M][32], int n)
{
    FILE *fp_input = fopen("D:\\class.txt","w"); //"D:\\c\\class.txt"

    if(fp_input==NULL){

        printf("无法打开输入文件!\n");
        return 0;
    }

    int i,j; // 修改
    for(i = 0;i < n;i++){ //for(i1=0;i1<100;i1++) 修改

        for(j = 0;j < M; j++){
            fprintf(fp_input,"%s ",s[i][j]);  // 修改
            //fprintf(fp_input,"%s ",student[i][j]);
        }
        //printf("\n"); 修改
        fprintf(fp_input,"\n");
    }
    fclose(fp_input);
    return 1;
}
void input_information()
{
    printf("\n请输入您需要录入的学生数量:");
    int number;
    scanf("%d",&number);
    printf("\n");

    char student[N][M][32];//姓名 性别 年龄 学号 学院

    int i,j;
    for(i = 0;i < number; i++)
    {
        for(j=0;j < M;j++){
        
        switch(j){
            case 0:
                printf("请输入学生姓名:\n");
                break;
            case 1:
                printf("请输入学生性别:\n");
                break;
            case 2:
                printf("请输入学生年龄:\n");
                break;
            case 3:
                printf("请输入学生学号\n");
                break;
            case 4:
                printf("请输入学生学院:\n");
                break;
        }
        
        scanf("%s", student[i][j]); //scanf("%s", &student[i][j]); 修改
        printf("\n");
        }    
        system("cls");
    }
    input(student, number);//input(student[number][5]);  修改
    printf("录入成功!");
}
int main()
{
     input_information();
     return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7462928
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:有序顺序表的最少时间查找
  • 除此之外, 这篇博客: 聊聊我是如何编程入门的中的 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    《C++ Primer中文版》本书面向C++语言的初学者,是一本很友好的自学教材。作者把C语言的基础概念和需要注意的编程细节说得很清楚,并且例程和习题丰富,相信认真读过之后,可以完成C语言入门这个目标。

    《高质量程序设计指南》,墙裂推荐,这本书看得比较过瘾,书里面有一些编程规范的东西,对于写程序的人来说,还是不错的,可以培养好的编码习惯,加深了一些知识的巩固。比较实用,也适合面试前看看。

    《Essential C++》是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。


    《More effective C++》,该书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。

    《C++ Templates中文版》,深入了解现代c ++模板的实用书籍。本书不仅是对C ++模板的权威解释,而且本书还深入地介绍了其他一般的C ++思想。

    《STL源码剖析》详细地了解STL的底层实现机制,同时也可以对常用数据结构,C++内存管理拥有更深的理解。

    其实还有《The C++ standard library(C++标准程序库)》、《C++并发编程实战》、《Thinking in C++(C++编程思想)》等,介绍的这些书我都买了,不过说实话,后面的几本都是泛泛的看了下,都没有认真学完。最后推荐三本最近微信读书上正在看的书。


    《提高C++性能的编程技术》,本书认为20%的性能缺陷将会占用我们80%的时间。因此我们把精力集中在最有价值的地方。本书详细讨论了临时对象、内存管理、继承、虚函数、内联、引用计数以及STL等一切有可能提升C++效率的细节内容。无论你是相关领域的从业人员,还是C++程序设计爱好者,或者是渴望突破编程瓶颈、大幅提升自我修为的程序设计爱好者,本书都必将使你获益良多。

    《从缺陷中学习C/C++》从本质上来说,这就是一个C/C++的错题集。全书中包括63个问题引发的错误,即书名中的缺陷。也是避坑指南。

    《用地图看懂世界格局》,这个有点跑题,不过我觉得这本书还不错,就推荐给有兴趣的小伙伴。

  • 您还可以看一下 刘建行老师的非计算机专业,转行程序员?我可以帮你课程中的 引言小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    根据提供的资料,程序代码部分并没有给出。因此,无法看到具体的错误和问题。请提供程序代码,以便我能够帮助你解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^