[英]C code to read a text file does not find EOF (end of file)
我已經編寫了這段簡短的代碼來讀取文本文件並將其信息復制到新的txt文件中,但是在此過程中進行了一些字符替換。
我的問題是,代碼完成了它應該做的所有工作,但沒有結束。 它在文件末尾(arq1)找不到EOF特殊字符,該字符將告訴它完成處理。
問題是什么?
#include<stdio.h>
#include<stdlib.h>
typedef enum {false, true} Boolean;
int main(){
FILE *arq1, *arq2;
char filename[30];
char first = '*' , second = '*';
Boolean f_use = false, s_use = false;
char aux;
printf("Filename: ");
scanf("%s", filename);
arq1 = fopen(filename, "r");
arq2 = fopen("Codes_out.txt", "w");
while(fscanf(arq1, "%c", &aux) != EOF && aux != '\n')
fprintf(arq2, "%c", aux); /*Copy first line*/
fprintf(arq2, "\n");
while(aux != EOF){ //#
printf("Processing new line\n"); // TEST
f_use = false;
s_use = false;
while(aux != '\t' && aux != ' ' && aux != EOF){ /* Copy locus ID*/
printf("%c", aux);//TEST
fscanf(arq1, "%c", &aux);
fprintf(arq2, "%c", aux);
printf("Copying ID\n");//TEST
}
printf("ID copied\n");//TEST
while(fscanf(arq1, "%c", &aux) != EOF && aux != '\n'){ //##
/*If a code for nitrogen base is found, identify
as first or second state and substitute
for a numeric code (1 or 2)*/
if(aux == 'C' || aux == 'G' || aux == 'A' || aux == 'T' ||
aux == 'c' || aux == 'g' || aux == 'a' || aux == 't'){
if(f_use == false){
/*First base not yet identified*/
first = aux;
f_use = true;
printf("OK 6a\n\n"); //TEST
printf("first = %c\n", first); //TEST
}
else if(s_use == false && aux != first){
/*second base not yet identified
and aux different from first base*/
second = aux;
s_use = true;
printf("OK 6b\n\n"); //TEST
printf("second = %c\n", second); //TEST
}
if(aux == first){
fprintf(arq2, "1");
printf("OK 5a\n\n"); //TEST
}
else if(aux == second){
fprintf(arq2, "2");
printf("OK 5b\n\n"); //TEST
}
}
else if(aux == ' ')
fprintf(arq2, "%c", aux);
else if(aux == 'N' || aux == 'n')
fprintf(arq2, "%c", aux);
else
fprintf(arq2, "3");
} //##
printf("%c ", aux);
fprintf(arq2, "\n"); /*add line break*/
printf("OK 7\n\n"); // //TEST
} //#
printf("Processing finished\n"); //Control
fclose(arq1);
fclose(arq2);
return 0;
}
EOF
不是字符,您不能嘗試使用fscanf(arq1, "%c", &eof);
讀取它fscanf(arq1, "%c", &eof);
您應該改為檢查fscanf()
的返回值,該返回值可以是EOF
或匹配參數的數量。
試試這樣的東西
int status;
while ((status = fscanf(arq1, "%c", &aux)) != EOF)
{
.
.
if (status == 1)
fprintf(arq2, "%c", aux);
.
.
}
還有很長一段時間, if
我推薦這個
switch (aux)
{
case 'C':
case 'G':
case 'A':
case 'T':
case 'c':
case 'g':
case 'a':
case 't':
/* code here */
break;
}
使用feof( arqN )
函數檢查文件結尾。 EOF代碼(0x1A)並非在所有文本文件中都存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.