【发布时间】:2017-07-25 01:16:55
【问题描述】:
我正在编写一个程序,它会询问用户一个“n”值,然后他们将输入“n”个值,这些值将存储到一个数组中并进行排序。我已经很容易完成了这部分。 我将把这个数组与从文本文件中读取的数字的输入进行比较。如果数字大于任何当前数组值,它将替换它们并将其余部分向下滑动。这将创建一个包含最大 'n' 值的数组
示例: n = 4 n 值为:999 972 954 462 937
a[4] = {999, 972, 954, 462, 937};
排序:
a[4] = {999, 972, 954, 937, 462};
如果文件输入是 968,结果是。 表示:
a[4] = {999, 972, 968, 937, 937};
这是我当前的代码。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
if (argc<3) //error checking
return -1;
int size = atoi(argv[2]);
int a[size];
int i, j, temp=0;
printf("Enter %d numbers\n", size); //user array input for size and n values
for(i = 0; i < size; i++)
scanf("%d", &a[i]);
for(i=0; i < size; i++){ //sorting array
for(j = i+1; j <size; j++){
if( a[i] < a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
FILE *input;
input = fopen(argv[1], "r");
if(input ==NULL) //error checking
return -1;
if(fscanf(input, "%d", &temp) != 1)
return -1;
while(fscanf(input, "%d", &temp) ==1){ //loop while there is file input
for(i =1 < size; i++){ //check if temp is larger than array values
if(temp > a[i] && temp < a[i-1]){
for(j = size-1; j >= i; j--) //slide down the rest of the array
a[j] = a[j-1];
a[i] = temp;
}
}
}
for(i=0; i <size; i++){ //print out array
printf("%d ", a[i]);
}
return (0);
}
如果我已经创建了数组和值,而不是使用用户输入,我已经尝试过这个更小更简单的技能。我还只是通过一个增加数字值而不是从文件中读取的循环传递了数组检查序列。这似乎适用于
a[5] = {10, 8, 6, 4, 2};
number = 5; // number++ number = 6 number = 7... until 10
result: a[5] = {10, 9, 8, 7, 6};
我很遗憾地说,即使程序在开始时没有打印正确的数组,我也可以看到文件中有数字。循环仍在通过文件,但在某一时刻,输出刚刚开始成为已排序的用户数组。我似乎无法正确获取数组值。有什么想法吗?
【问题讨论】:
-
5 个元素,而
n = 4?奇怪的问题集。 -
if(fscnf(input, "%d", %temp) != 1)行会因为%的误用而产生编译错误。另请注意,标准库没有fscnf()(不是fscanf())函数。 -
另一个编译错误将在
for(i =1 < size; i++){行中发出,因为分号的数量少于预期。 -
@MikeCAT,抱歉打错了。我在 vdi 上有我的实际程序。我无法复制和粘贴我的代码。
-
请不要在此处重新输入您的代码以发布 - 这会导致问题。了解如何复制'n'粘贴您的代码,以免引入令人分心的错误。我们不能说它们是转录错误(并且不必担心它们)。请注意,如果您粘贴代码并且它没有缩进,则在编辑框中选择代码并使用其上方的
{}将所选材料缩进为代码。
标签: c arrays file sorting user-input