请对此我遇到很多麻烦。我有一个包含大量字符的文本文件,我需要读取每个字符,如果它是字母表的字母,那么我需要将它存储在一个数组中。
到目前为止,我只是尝试将字符放在我的数组中,无论它是否是字母字符,但我的fscanf没有读取任何内容。
这是我的代码
char j = ' ';
int i;
FILE *file = fopen("text.txt", "r");
for(i = 0; i < 10; i++)
{
fscanf(file, " %c ", &j);
printf(" %c\n", j); //So I could see if j got anything BUT I'M NOT :(
if((j >= '97' && j <= '122') || (j >= '65' && j <= '90'))
{
fscanf(file, "%c", &array[i]);
}
}
fclose(file);
return 0;
我的结果?没有什么只是空白。是的,我的文本文件与我的.c文件在同一文件夹中
帮助
我的问题:我的fscanf实际上并没有读任何东西。我的j变量永远不会改变!由于下面的助手我现在可以解决的ASCII问题,但是fscanf是我阻止我的进步的主要问题
答案 0 :(得分:2)
主要问题:
/* WRONG */
if((j >= '97' && j <= '122') || (j >= '65' && j <= '90'))
/* CORRECT */
if((j >= 97 && j <= 122) || (j >= 65 && j <= 90))
换句话说,表达式'A'
,'\0x41'
和65
在此上下文中都是等效的。
但'65'不是。它表示字符“ASCII 6”和“ASCII 6” - 这样的字符不存在:(
PS:
正如Bluepixy所说,isalpha()是你的朋友。我建议您在代码中替换isalpha()
。
答案 1 :(得分:0)
您可以在此处调整代码,并通过isalnum()函数检查字符
char *readFileCharacter(char *fileName) {
FILE *file = fopen(fileName, "r");
int c;
char *code;
size_t n = 0;
if (file == NULL)
return NULL; //impossible to open file
// Get the size of the file to allocate correctly the array of char
fseek(file, 0, SEEK_END);
long f_size = ftell(file);
fseek(file, 0, SEEK_SET);
code = malloc(f_size);
while ((c = fgetc(file)) != EOF) {
if ( isalnum(c) ) // check if alphanum
code[n++] = (char)c;
}
fclose(file);
code[n] = '\0';
return code;
}