mamaaini 发表于 2023-11-25 22:18:40

运行崩溃

输入共11行,前10行每行是一个学生的姓名,最后一行是10个用空格分开的整数表示对应的10个学生成绩。(姓名大小不超过20个字符)

输出姓名按字典序排列后的学生姓名和成绩,共10行,每个学生的姓名和成绩占一行,姓名和成绩间用逗号分开。 为什么运行崩溃

#include <stdio.h>
#include <string.h>
int main()
{
    char name,names;
    int score,scores;
    int i,j;
    for(i=0;i<10;i++)
    {
      scanf("%s\n",name);
    }
    for(i=0;i<10;i++)
    {
      scanf("%d",&score);
    }
    for(i=0;i<10;i++)
    {
      for(j=0;j<10-i-1;j++)
      {
            if(strcmp(name,name)>0)
            {
               strcpy(names,name);
      strcpy(name,name);
      strcpy(name,names);
      scores=score;
      score=score;
          score=scores;
            }

      }
    }
    for(i=0;i<10;i++)
    {
      printf("%s,%d\n",name,score);
    }
    return 0;
}

FishC_GPT 发表于 2023-11-25 22:18:50

根据你提供的代码,我看到一些问题可能导致程序运行崩溃。首先,你声明了`char name, names;`和`int score, scores;`,但它们应该是字符数组和整数数组。所以应该使用`char name;`和`int score;`。

其次,你在`for`循环中使用了`name`和`score`,但它们是单个字符和整数,无法存储所有学生的姓名和成绩。你需要使用`name`和`score`来保存每个学生的姓名和成绩。

最后,你只给出了代码的一部分,可能还有其他错误存在。如果你能提供完整的代码,我可以更好地帮助你解决问题。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

mamaaini 发表于 2023-11-25 22:26:24

FishC_GPT 发表于 2023-11-25 22:18
根据你提供的代码,我看到一些问题可能导致程序运行崩溃。首先,你声明了`char name, names;`和`int score, ...

#include <stdio.h>
#include <string.h>
int main()
{
    char name,names;
    int score,scores;
    int i,j;
    for(i=0;i<10;i++)
    {
      scanf("%s\n",name);
    }
    for(i=0;i<10;i++)
    {
      scanf("%d",&score);
    }
    for(i=0;i<10;i++)
    {
      for(j=i+1;j<10;j++)
      {
            if(strcmp(name,name)>0)
            {
               strcpy(names,name);
               strcpy(name,name);
               strcpy(name,names);
               scores=score;
               score=score;
               score=scores;
            }

      }
    }
    for(i=0;i<9;i++)
    {
      printf("%s,%d\n",name,score);
    }
    printf("%s,%d",name,score);
    return 0;
}
为啥运行崩溃

FishC_GPT 发表于 2023-11-25 22:26:40

mamaaini 发表于 2023-11-25 22:26
#include
#include
int main()
{
    char name ...

根据你提供的代码,我看到以下问题可能导致程序运行崩溃:

1. 变量`name`和`names`应该是字符数组,用来存储学生的姓名。同样,变量`score`和`scores`应该是整数数组,用来存储学生的成绩。

2. `for`循环的条件不完整,缺少一个条件判断语句来控制循环的次数。应该为`for(i=0; i<10; i++)`,表示循环10次。

3. 在每次循环中,应该使用`scanf`函数来读取每个学生的姓名和成绩。例如,可以使用`scanf("%s%d", name, &score)`来读取学生的姓名和成绩。

4. 当读取完每个学生的姓名和成绩后,需要将它们存储在相应的数组中,以便后续处理。

5. 排序学生姓名时,可以使用标准库函数`qsort`来进行排序,并提供一个自定义的比较函数。

下面是修正后的代码示例:

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

int compare(const void *a, const void *b) {
    return strcmp((const char *)a, (const char *)b);
}

int main() {
    char names; // 学生姓名数组
    int scores;   // 学生成绩数组

    for(int i = 0; i < 10; i++) {
      scanf("%s %d", names, &scores);
    }

    // 根据学生姓名排序
    qsort(names, 10, sizeof(names), compare);

    // 输出排序后的学生姓名和成绩
    for(int i = 0; i < 10; i++) {
      printf("%s,%d\n", names, scores);
    }

    return 0;
}

这样,你可以输入10个学生的姓名和成绩,然后程序将按字典序排序并输出。注意,本代码假设每个学生的姓名不超过20个字符。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

mamaaini 发表于 2023-11-25 22:27:37

FishC_GPT 发表于 2023-11-25 22:26
根据你提供的代码,我看到以下问题可能导致程序运行崩溃:

1. 变量`name`和`names`应该是字符数组,用来 ...

不用stdlib.h这个头文件

FishC_GPT 发表于 2023-11-25 22:27:52

mamaaini 发表于 2023-11-25 22:27
不用stdlib.h这个头文件

如果你不想使用标准库中的<stdlib.h>头文件,可以考虑使用以下代码来实现你的需求:

#include <stdio.h>
#include <string.h>

// 定义学生结构体
typedef struct {
    char name;
    int score;
} Student;

// 比较函数,用于给学生姓名排序
int compare(const void *a, const void *b) {
    Student *studentA = (Student *)a;
    Student *studentB = (Student *)b;
    return strcmp(studentA->name, studentB->name);
}

int main() {
    Student students;

    // 输入学生信息
    printf("请输入10个学生的姓名和成绩:\n");
    for (int i = 0; i < 10; i++) {
      scanf("%s %d", students.name, &students.score);
    }

    // 根据学生姓名排序
    qsort(students, 10, sizeof(Student), compare);

    // 输出排序后的学生信息
    printf("姓名按字典序排列后的学生姓名和成绩:\n");
    for (int i = 0; i < 10; i++) {
      printf("%s,%d\n", students.name, students.score);
    }

    return 0;
}

这段代码首先定义了一个包含学生姓名和成绩的结构体Student。然后,通过循环输入10个学生的姓名和成绩。接下来,使用qsort函数对学生数组按照姓名进行排序。最后,通过循环输出排序后的学生姓名和成绩。

请注意,在这个示例中,我们使用了标准库中的<stdio.h>和<string.h>头文件,因为它们提供了一些方便的输入输出和字符串处理函数。如果你仍然不想使用这些头文件,那么可能需要自己实现一些相应的功能。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

mamaaini 发表于 2023-11-25 22:30:24

FishC_GPT 发表于 2023-11-25 22:27
如果你不想使用标准库中的头文件,可以考虑使用以下代码来实现你的需求:



只用#include <stdio.h>和#include <string.h>两个头文件,也不用结构体的C语言

FishC_GPT 发表于 2023-11-25 22:30:42

mamaaini 发表于 2023-11-25 22:30
只用#include 和#include 两个头文件,也不用结构体的 ...

如果你只能使用`#include`和`#include`两个头文件,并且不能使用结构体,可以使用以下代码来实现你的需求:

#include <stdio.h>
#include <string.h>

int main() {
    char names;// 10个学生的姓名,每个姓名最长为20个字符
    int scores;      // 对应的10个学生成绩

    // 输入学生姓名和成绩
    printf("请输入10个学生的姓名和成绩:\n");
    for (int i = 0; i < 10; i++) {
      scanf("%s %d", names, &scores);
    }

    // 使用冒泡排序按照姓名进行排序
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j < 9 - i; j++) {
            if (strcmp(names, names) > 0) {
                // 交换学生姓名
                char temp;
                strcpy(temp, names);
                strcpy(names, names);
                strcpy(names, temp);

                // 交换学生成绩
                int tempScore = scores;
                scores = scores;
                scores = tempScore;
            }
      }
    }

    // 输出排序后的学生姓名和成绩
    printf("姓名按字典序排列后的学生姓名和成绩:\n");
    for (int i = 0; i < 10; i++) {
      printf("%s,%d\n", names, scores);
    }

    return 0;
}

这段代码使用了一个二维字符数组`names`来保存学生的姓名,长度为10(10个学生),每个姓名的最大长度为20。同时,使用一个一维整数数组`scores`来保存学生成绩。在输入学生姓名和成绩后,通过冒泡排序按照姓名进行字典序排序。最后,输出排序后的学生姓名和成绩。请注意,这种方法是比较简单的排序方法,如果数据量较大,建议使用更高效的排序算法。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 运行崩溃