将文件中的值添加到数组中,直到某个字符为止

时间:2018-10-25 20:27:32

标签: c

我正在开发一个程序,该程序使用文件重定向来读取文件,每行读取一个字符,直到达到“ 0”,将字符存储在数组中,然后对该数组进行排序(从最大到最小)。无论如何,我真的只需要帮助阅读字符,直到出现零为止。以下是我正在阅读的文本文件:

f
k
s
j
p
a
v
r
t
u
h
m
g
e
b
y
n
z
w
l
i
x
q
c
o
d
0

下面是我到目前为止的代码:

int main(void)
{
    int i=0;
    char array[100];

    while(fscanf(stdin, "%c", &array[i]) && array[i]!='0')
    {
        i++;
    }

    int N = (sizeof(array)/sizeof(array[0]));

    for(i=0;i<N;i++)
    {
        printf("%c", array[i]);
    }

return(0);
}

当我运行该程序时,它将打印出文件的每一行,包括零。它还在零之后打印出一些非常奇怪的字符(使用gcc编译器)。我在做什么错了?

3 个答案:

答案 0 :(得分:2)

您需要将N设置为i的值,当前始终为100

答案 1 :(得分:1)

您使用i来跟踪已阅读的项目数,然后覆盖循环中i的值并打印出所有100个元素,无论您在其中存储了什么内容还是在其中不是。

使用与循环不同的变量来计数元素,并将计数用作循环极限。

int count=0;
char array[100];

while(fscanf(stdin, "%c", &array[count]) && array[count]!='0')
{
    count++;
}

for(i=0;i<count;i++)
{
    printf("%c", array[i]);
}

答案 2 :(得分:0)

fscanf需要跳过分隔符(输入或空格),否则它将被合并到您的列表中。添加空格可以解决此问题。

#include <stdio.h>
#include <stdlib.h>

int sort (const void *a,const void *b)
{
    return ((int)*((unsigned char *)a)) - ((int)*((unsigned char *)b));
}

int main (void)
{
    unsigned char array[100],i=0;
    while (fscanf(stdin," %c", &array[i]) && array[i] != '0')
        i++;
    qsort (array,i,1,sort);
    while (i)
        printf ("%c\n", array[--i]);
}

该程序似乎排序错误,但是打印循环也恰好反向打印,因此可以很好地解决它。由于数组是无符号字符,因此排序例程将其强制转换为int,以防止可能的溢出。