我正在尝试弄清楚如何逐个字符地打印用户定义的文本文件的内容。我相信我已经正确检索了文件,但我不确定如何打印每个字符。
#include <stdio.h>
#include <ctype.h>
#define ELEMENT 300
#define LENGTH 20
void main(char str[ELEMENT][LENGTH])
{
FILE *infile;
char textfile[1000];
char read_char;
int endoff;
int poswithin = 0;
int wordnum= 0;
printf("What is the name of your text file?: ");
scanf("%s", &textfile);
infile=fopen(textfile,"r");
if (infile == NULL) {
printf("Unable to open the file.");
}
else
{
endoff=fscanf(infile,"%c",&read_char);
while(endoff!=EOF);
{
这是我相信我被困住的地方。第一个字符被读入变量read_char但是它似乎没有打印任何东西?
if(read_char>=65&&read_char<=90 || read_char<=65)
{
str[wordnum][poswithin]=read_char;
printf("%c", read_char);
poswithin++;
}
else
{
str[wordnum][poswithin]=(char)"\n";
poswithin=0; wordnum++;
}
endoff=fscanf(infile, "%s", &read_char);
}
}
fclose(infile);
}
答案 0 :(得分:1)
第二次拨打fscanf
endoff=fscanf(infile, "%s", &read_char);
应该是
endoff=fscanf(infile, "%c", &read_char);
此外,
str[wordnum][poswithin]=(char)"\n";
不应该将字符串文字强制转换为char
,并且可能应该添加NULL终止符而不是换行符:
str[wordnum][poswithin]='\0';
最后,您不应该尝试将str
声明为main
的参数。
char str[ELEMENT][LENGTH];
int main() // or int main(int argc, char* argv[])
答案 1 :(得分:0)
将fscanf
与%c
格式说明符一起使用对于从文件中读取单个字符来说是过分的。
尝试fgetc
阅读一个字符。该函数避免了解析格式说明符字符串和可变数量的参数的开销。
更有效的方法是使用fread
分配缓冲区或数组并从文件中读取字符串“块”。然后,您可以扫描缓冲区或阵列。与许多读取单个字节的调用相比,它具有更少的函数调用开销。高效的缓冲区大小是512的倍数,以符合磁盘驱动器扇区大小。