测试文件中字符串中的 space
Test the space in a string from a file
我正在尝试测试 file.txt 中的字符是否为 space ' ' 或不使用此代码:
char *Appartient (FILE *f, char *S)
{
int i = 0, nbdechar = 0, nbocc = 0, PosdePremierChar, space = 0;
char c;
while ((c = getc(f)) != EOF) {
PosdePremierChar = ftell(f);
if (c == S[0]) {
nbdechar = 0;
for (i = 1; i < strlen(S); i++) {
c = getc(f);
if (c == S[i]) {
nbdechar++;
}
}
if (nbdechar == strlen(S) - 1) {
nbocc++;
} else {
rewind(f);
fseek(f, PosdePremierChar - 1, SEEK_CUR);
while ((c = getc(f)) != ' ');
}
} else {
while ((c = getc(f)) != ' ') {
space++;
}
}
}
printf("\n Le nb d'occurence est %d", nbocc);
if (nbocc == 0) {
return "false";
} else {
return "true";
}
}
但是当我在我的调试器中检查变量 'c' 时,一个奇怪的符号 '' 像垃圾一样出现:
怎么了
可能是将getc()
、EOF
(标准化为负数,通常为-1)的文件结尾结果转换为字符的结果。
请注意,如果文件中没有 space,您的循环将永远不会终止,因为 EOF != ' '
并且在您第一次到达文件末尾后该条件一直为真。
您没有测试 f
是否打开,如果没有打开,则 未定义的行为 将发生,请检查文件是否打开
FILE *file;
int chr;
if ((file = fopen("test.txt", "r")) == NULL)
{
fprintf(stderr, "Cannot open `test.txt'\n");
return -1;
}
while (((chr = fgetc(file)) != EOF) && (chr == ' '))
printf("space\n");
您应该声明 chr
类型 int
,因为 fgetc()
returns 一个 int
,例如 EOF
需要int
而不是 char
.
此外,调试模式对于跟踪变量的值很有用,我敢打赌,如果您知道的话,它可以根据您的需要提供 ascii、十进制或十六进制的五个值怎么问。
像这样修改你的代码,跟踪它,你可能会对 getc()
returns 之间的关系以及它与 char
s 的关联方式有所启发:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int result = EXIT_SUCCESS;
FILE * f = fopen("test.txt", "r");
if (NULL == f)
{
perror("fopen() failed");
result = EXIT_FAILURE;
}
else
{
int result = EOF;
while (EOF != (result = getc(f)))
{
char c = result;
printf("\n%d is 0x%02x is '%c'", result, result, c);
if (' ' == c)
{
printf(" is space ");
}
}
printf("\nread EOF = %d = 0x%x\n", result, result);
fclose(f);
}
return result;
}
我正在尝试测试 file.txt 中的字符是否为 space ' ' 或不使用此代码:
char *Appartient (FILE *f, char *S)
{
int i = 0, nbdechar = 0, nbocc = 0, PosdePremierChar, space = 0;
char c;
while ((c = getc(f)) != EOF) {
PosdePremierChar = ftell(f);
if (c == S[0]) {
nbdechar = 0;
for (i = 1; i < strlen(S); i++) {
c = getc(f);
if (c == S[i]) {
nbdechar++;
}
}
if (nbdechar == strlen(S) - 1) {
nbocc++;
} else {
rewind(f);
fseek(f, PosdePremierChar - 1, SEEK_CUR);
while ((c = getc(f)) != ' ');
}
} else {
while ((c = getc(f)) != ' ') {
space++;
}
}
}
printf("\n Le nb d'occurence est %d", nbocc);
if (nbocc == 0) {
return "false";
} else {
return "true";
}
}
但是当我在我的调试器中检查变量 'c' 时,一个奇怪的符号 '' 像垃圾一样出现:
怎么了
可能是将getc()
、EOF
(标准化为负数,通常为-1)的文件结尾结果转换为字符的结果。
请注意,如果文件中没有 space,您的循环将永远不会终止,因为 EOF != ' '
并且在您第一次到达文件末尾后该条件一直为真。
您没有测试 f
是否打开,如果没有打开,则 未定义的行为 将发生,请检查文件是否打开
FILE *file;
int chr;
if ((file = fopen("test.txt", "r")) == NULL)
{
fprintf(stderr, "Cannot open `test.txt'\n");
return -1;
}
while (((chr = fgetc(file)) != EOF) && (chr == ' '))
printf("space\n");
您应该声明 chr
类型 int
,因为 fgetc()
returns 一个 int
,例如 EOF
需要int
而不是 char
.
此外,调试模式对于跟踪变量的值很有用,我敢打赌,如果您知道的话,它可以根据您的需要提供 ascii、十进制或十六进制的五个值怎么问。
像这样修改你的代码,跟踪它,你可能会对 getc()
returns 之间的关系以及它与 char
s 的关联方式有所启发:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int result = EXIT_SUCCESS;
FILE * f = fopen("test.txt", "r");
if (NULL == f)
{
perror("fopen() failed");
result = EXIT_FAILURE;
}
else
{
int result = EOF;
while (EOF != (result = getc(f)))
{
char c = result;
printf("\n%d is 0x%02x is '%c'", result, result, c);
if (' ' == c)
{
printf(" is space ");
}
}
printf("\nread EOF = %d = 0x%x\n", result, result);
fclose(f);
}
return result;
}