我正在尝试读取文件并将其每个字符存储在2d数组(大小为7 x 7)中,而不使用'\ n'等特殊字符,然后打印该2d数组。
我写了一个代码,但是它不存储和打印2d数组中的最后一行字符。
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ar[7][7],c;
int i,j;
FILE *fp;
fp=fopen("B11.txt","r");
if(fp==NULL)
printf("File not Found");
for(i=0; i<7; i++)
{
for(j=0; j<7; j++)
{
fscanf(fp,"%c",&ar[i][j]);
}
}
for(i=0; i<7; i++)
{
for(j=0; j<7; j++)
{
printf("%c",ar[i][j]);
}
}
fclose(fp);
}
这是我的代码的输出:
abtvelo
camerag
bhtollp
qeryvxq
appboyl
awerfgh
但是文件包含
abtvelo
camerag
bhtollp
qeryvxq
appboyl
awerfgh
comsats
此处文件也包含单词'comsats',但未打印。为什么不印出“ comsats”一词?
答案 0 :(得分:2)
for(i=0; i<7; i++)
{
for(j=0; j<7; j++)
{
fscanf(fp,"%c",&ar[i][j]);
}
}
ar[i][0]
与上一行遗漏的\n
总计为7 \n
,因此忽略了最后一行。
更改为
fscanf(fp," %c",&ar[i][j]);
或
在内部getchar()
循环之后有for
。
答案 1 :(得分:1)
\n
字符导致最后一行被跳过。
更改此:
fscanf(fp,"%c",&ar[i][j]);
对此:
fscanf(fp," %c",&ar[i][j]);
^
使用scanf()
等%c %lf %d
格式说明符时,空格会占用换行符。但是,读取字符串(%s
时不需要空格。
关于您的陈述:没有特殊字符,例如'\ n'
如果这样您指的是以下字符:
考虑结合使用空白测试功能的 fscanf() 和 {{3}用一个替换 fgetc() 构造。 }} 。 (检查上面列出的那些字符。)示例:
#define ROW 7
#define COL 7
int main(void)
{
int row = 0;
int col = 0;
char ar[COL][ROW];
int byte;
FILE *fp = fopen(filename, "r");
if(fp)
{
byte = fgetc(fp);
while(byte != EOF)
{
if(!isspace(byte))
{ //populate array only if not white-space
ar[col][row++] = (char)byte;
if(row == ROW)
{
row = 0;
col++;
}
if(col == COL) break;
}
byte = fgetc(fp);
}
fclose(fp);
}
// print results as in your original post...
return 0;
}