到目前为止,这是我的代码。我完全能够对包含数字的文件进行排序,但在字符方面却毫无头绪。它接收我选择的文件并输出带有排序数组的另一个文件。但到目前为止,我所得到的只是空白文件,我无法弄清楚原因。
那么如何修复我的代码来排序一个字符数组然后输出呢?
#include <stdio.h>
int bubble_sort(char *a, int n);
int main(void) {
char a[10];
int n = sizeof a / sizeof a[10];
int i;
char inname;
char outname;
printf("Enter input name: ");
scanf("%s", &inname);
printf("Enter output name: ");
scanf("%s", &outname);
FILE *in, *out;
out = fopen(&outname, "w");
if ((in = fopen(&inname, "r")) == NULL) {
printf("File not found\n");
}
else {
for (int i = 0; i < 10; i++)
{
fscanf(in, "%s ", &a[i]);
}
bubble_sort(a, n);
for (i = 0; i < 10; i++) {
printf("%s\n", a[i]);
fprintf(out, "%s\n", a[i]);
}
}
fclose(in);
fclose(out);
return 0;
}
int bubble_sort(char *a, int n) {
int i, j;
char temp;
for (j = 1; j<n; j++)
{
for (i = 0; i<n - j; i++)
{
if ((int)a[i] >= (int)a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
return a[i];
}
答案 0 :(得分:2)
正如我所看到的,基本问题是
scanf("%s", &inname);
在您的代码中,inname
是一个char
,无法容纳字符串输入。你需要一个阵列。
您需要更改
char inname;
char outname;
到
#define NAMSIZ 32
char inname[NAMSIZ] = {0};
char outname[NAMSIZ] = {0};
然后,
scanf("%31s", inname);
并相应地。
fscanf(in, "%s ", &a[i]);
同样存在问题。