从用户定义的文本文件中读取和打印字符

时间:2013-12-02 19:53:31

标签: c++ file printing

我正在尝试弄清楚如何逐个字符地打印用户定义的文本文件的内容。我相信我已经正确检索了文件,但我不确定如何打印每个字符。

#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);
}

2 个答案:

答案 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的倍数,以符合磁盘驱动器扇区大小。