运行崩溃
输入共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;
}
根据你提供的代码,我看到一些问题可能导致程序运行崩溃。首先,你声明了`char name, names;`和`int score, scores;`,但它们应该是字符数组和整数数组。所以应该使用`char name;`和`int score;`。
其次,你在`for`循环中使用了`name`和`score`,但它们是单个字符和整数,无法存储所有学生的姓名和成绩。你需要使用`name`和`score`来保存每个学生的姓名和成绩。
最后,你只给出了代码的一部分,可能还有其他错误存在。如果你能提供完整的代码,我可以更好地帮助你解决问题。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 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;
}
为啥运行崩溃 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官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-25 22:26
根据你提供的代码,我看到以下问题可能导致程序运行崩溃:
1. 变量`name`和`names`应该是字符数组,用来 ...
不用stdlib.h这个头文件 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官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-11-25 22:27
如果你不想使用标准库中的头文件,可以考虑使用以下代码来实现你的需求:
只用#include <stdio.h>和#include <string.h>两个头文件,也不用结构体的C语言 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]