C程序读取文件的内容并将其传递给数组

时间:2013-12-25 11:34:07

标签: c arrays algorithm

我想读取文本文件的内容并将其复制到3个数组。前14行到'a'数组,接下来是14到'b'数组,剩下的是c。当我按一个进入选项时,它必须显示.txt文件的前14行。当我编译我给出的代码时,它只给出了整个数组的第一个字符。请提前帮助和谢谢。

我的代码:

#include<stdio.h>
#include<string.h>
void main()
{
int x,i;
char *a[100],*b[100],*c[100];
FILE *stream,*out;
char ch;
clrscr();
stream=fopen("test.txt","r");
while((ch=fgetc(stream))!=EOF)
{
for(i=0;i<14;i++)
a[i]==ch;
//ch=fgetc(stream);
//printf("%c",ch);
}
fclose(stream);
printf("Enter your choice");
scanf("%d",&x);
switch(x)
{
case 1:
    for(i=0;i<14;i++)
    printf("%s\n",a[i]);
    break;
case 2:
    for(i=0;i<14;i++)
    printf("%s\n",b[i]);
    break;
case 3:
    for(i=0;i<14;i++)
    printf("%s\n",c[i]);
    break;
case 4:
    exit(0);
default:
    printf("Invalid choice");
    break;
}
getch();
}

电流输出: 输入您的选择1 ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ Ñ

2 个答案:

答案 0 :(得分:1)

typedef char *CP14[14];

int main(){
    int x,i;
    char *a[14], *b[14], *c[14];
    CP14 *abcp, *p[] = {&a, &b, &c, NULL};
    char buffer[14*3*128]={0};//128 : max of one line
    FILE *stream;
    int ch, nlcount=0;//ch is int for fgetc
    int gp = 0;

    stream=fopen("test.txt","r");

    abcp = p[gp];
    (*abcp)[0]=&buffer[0];
    for(i=0;i<sizeof(buffer)-1 && (ch=fgetc(stream))!=EOF;++i){
        if('\n'== (buffer[i] = ch)){
            buffer[i]= '\0';
            if(++nlcount == 14){
                nlcount = 0;
                if(NULL == (abcp = p[++gp]))
                    break;
            }
            (*abcp)[nlcount]=&buffer[i+1];
        }
    }
    fclose(stream);

...

答案 1 :(得分:0)

如果您知道该文件将包含14 * 3个字符,则不需要while循环。

只需在三个连续的for循环中读取它们。类似的东西:

for(i=0;i<14;++i)
    a[i]=fgetc(stream));
for(i=0;i<14;++i)
    b[i]=fgetc(stream));
for(i=0;i<14;++i)
    c[i]=fgetc(stream));

此外,==是比较而非赋值运算符。