【发布时间】:2020-07-06 11:25:15
【问题描述】:
我创建了一个程序,可以按字母数字顺序对数组中的字符串进行排序。
但我的问题是如何做到这一点,以便在您运行程序时,它会询问字符串(使用scanf,但问题是如何使用char const *array?)然后程序排序并创建一个将保存结果的新文件。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *myFile = NULL;
static void consoleWrite(char const **a, size_t b) {
size_t i;
for (i = 0; i < b; i++)
fprintf(myFile, "%s ", a[i]);
printf("\n");
}
static int string_cmp(void const *i, void const *j) {
char const *const *pointerI = i;
char const *const *pointerJ = j;
return strcmp(*pointerJ, *pointerI); // comparaison de la chaine de caractère !
}
int main(void) {
char const *array[] = {
"01", "fdf", "gffg", "FRSTM-PFOV1DK", "FRSTM-KEFF2OQHT"
};
myFile = fopen("file.ini", "a+");
long array_size = sizeof array / sizeof *array;
qsort(array, array_size, sizeof *array, string_cmp);
consoleWrite(array, array_size);
printf("Le tri a été effectué ! ");
return 0;
}
我想将我的数据保存在变量数组中,然后用这个变量进行排序。
【问题讨论】:
-
OT: about:
fprintf (myFile, "%s ", a[i]);建议在格式字符串中附加一个 '\n',这样数组中的每个项目都在输出文件中的单独一行上。 -
OT:关于:`myFile =fopen("file.ini", "a+");` 始终检查 (!=NULL) 返回值以确保操作成功。如果不成功,则调用
perror( "your error message" ); exit( EXIT_FAILURE );注意:exit()和EXIT_FAILURE通过头文件暴露:stdlib.h -
关于:
myFile =fopen("file.ini", "a+");为什么+在文件从不被读取的模式下?模式中的a表示每次运行程序时文件都会变大。这就是你想要的吗? -
您是否意识到文件正在按降序排序(由于对
strcmp()的调用中的参数顺序? -
关于语句:
printf ("\n");您是否意识到printf()语句的输出将进入您的终端,而不是正在生成的文件。这是你想要的吗?
标签: c arrays pointers scanf quicksort