我想读取文本文件的内容并将其复制到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 ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ ñ Ñ
答案 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));
此外,==
是比较而非赋值运算符。