gpt4 book ai didi

c - 订购(语言 C)

转载 作者:行者123 更新时间:2023-11-30 20:03:53 29 4
gpt4 key购买 nike

我正在尝试从用户将输入的数字(代码)中对结构进行排序,并且我正在使用冒泡排序。我希望程序打印按数字(代码)排序的所有数据,但它只对数字(代码)进行排序。有人可以帮我对数字(代码)中的其他元素进行排序吗?

代码:

#include locale.h  
#include stdio.h
#include string.h

int main(void) {
setlocale(LC_ALL, "Portuguese");
int aux = 0, i, j;
struct dados {
int codigo;
char titulo[40];
} livro[10];

for (i = 0; i < 10; i++) {
printf("Código %d: ", i);
scanf("%d", &livro[i].codigo);
fflush(stdin);
printf("Título %d: ", i);
gets(livro[i].titulo);
}
for (i = 0; i < 10; i++) {
for (j = i + 1; j < 10; j++) {
if (livro[i].codigo > livro[j].codigo) {
aux = livro[i].codigo;
livro[i].codigo = livro[j].codigo;
livro[j].codigo = aux;
}
}
}
for (i = 0; i < 10; i++) {
printf("%d %s\n", livro[i].codigo, livro[i].titulo);
}
}

最佳答案

您的代码中存在多个问题:

  • #include 行中存在语法错误。
  • 读取循环不正确:您没有检查 scanf() 的返回值,而是使用了过时的函数 gets(),它只会读取待处理的换行符由输入流中的 scanf() 留下。读入数组的数据将不正确,并且行为可能未定义。
  • fflush(stdin); 具有未定义的行为。
  • 在排序循环中,您仅交换 codigo 字段的值,而不是数组元素。你正在破坏数据。您应该交换结构。

这是修改后的版本:

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

int main(void) {
setlocale(LC_ALL, "Portuguese"); // probably incorrect?
int i, j;
struct dados {
int codigo;
char titulo[40];
} livro[10];

for (i = 0; i < 10; i++) {
printf("Código %d: ", i);
if (scanf("%d", &livro[i].codigo) != 1)
return 1;
printf("Título %d: ", i);
if (scanf(" %39[^\n]", livro[i].titulo) != 1)
return 1;
}
for (i = 0; i < 10; i++) {
for (j = i + 1; j < 10; j++) {
if (livro[i].codigo > livro[j].codigo) {
struct dados aux = livro[i];
livro[i] = livro[j];
livro[j] = aux;
}
}
}
for (i = 0; i < 10; i++) {
printf("%d %s\n", livro[i].codigo, livro[i].titulo);
}
return 0;
}

关于c - 订购(语言 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46355003/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com