我有一个函数,可以从文本文件中读取字符串,并将它们存储在最多1000行和81列(80个有用字符和\0
)的二维数组中。
在将文本文件插入数组之前,如何在该文本文件的一行中引入一个检测器来检测多少个字符?
因为该练习表明该文本文件每行最多只能包含80个字符(有用),但是我现在的功能是,如果该文件超过80个,它将继续将字符串读取到下一行数组。如何使文本文件中的行在\n
之前包含79个以上的字符,并返回错误消息?
这是我现在读取文件的功能:
int lerficheiro(char texto[MAXLINHAS][MAXCARPORLINHA])
{
FILE * fp;
fp = fopen("tudomaiusculas.txt", "r");
if(fp==NULL)
{
printf("Erro ao abrir o ficheiro.");
return (-1);
}
while(!feof(fp))
{
for(int linha = 0; linha < MAXLINHAS; linha++)
{
fgets(texto[linha], MAXCARPORLINHA, fp);
}
}
fclose(fp);
for(int linha = 0; linha < MAXLINHAS; linha++)
{
for(int coluna = 0; coluna < MAXCARPORLINHA; coluna++)
{
if(texto[linha][coluna] >= 97 && texto[linha][coluna] <= 122)
{
printf("O ficheiro contem letras minusculas, a terminar.");
return (-1);
}
}
}
return (1);
}
答案 0 :(得分:0)
您可以添加一个计数器,每次它将一个字符复制到文件时,在fgets下将其递增1,然后添加一个if语句以打印错误
count++
if(count>=79){
printf("too many characters");
return;
}
答案 1 :(得分:0)
假设MAXCARPORLINHA是82个80个字符,加上一个换行符和一个终止零。
使用strchr
测试换行符。如果找不到,请继续阅读直到找到换行符并设置一个标志。
int lerficheiro(char texto[MAXLINHAS][MAXCARPORLINHA])
{
FILE * fp;
fp = fopen("tudomaiusculas.txt", "r");
if(fp==NULL)
{
printf("Erro ao abrir o ficheiro.");
return (-1);
}
int linha = 0;
while(fgets(texto[linha], MAXCARPORLINHA, fp))
{
int toolong = 0;
while ( ! strchr ( texto[linha], '\n'))//check for newline. loop if no newline
{
if ( ! fgets(texto[linha], MAXCARPORLINHA, fp))//read more characters
{
break;//found eof
}
toolong = 1;//set flag
}
if ( ! toolong)
{
texto[linha][strcspn ( texto[linha], "\n")] = 0;//remove newline
linha++;//increment to next line
if ( linhas >= MAXLINHAS)
{
break;
}
}
}
fclose(fp);
for(int linha = 0; linha < MAXLINHAS; linha++)
{
for(int coluna = 0; coluna < MAXCARPORLINHA; coluna++)
{
if(texto[linha][coluna] >= 'a' && texto[linha][coluna] <= 'z')
{
printf("O ficheiro contem letras minusculas, a terminar.");
return (-1);
}
}
}
return (1);
}