【发布时间】:2014-03-02 05:52:20
【问题描述】:
我在使用 fscanf 从文件中读取字符串并打印每个字符串中的字母数时遇到了困难。该文件如下所示:
ACGTTTTAAGGGCTGAGCTAGTCAGTTCATCGCGCGCGTATATCCTCGATCGATCATTCTCTCTAGACGTT ACGTTTTAAGGGCTTAGAGCTTATGCTAATCGCGCGCGTATATCCTCGATCGATCATTCTCTCTAGACGTT TCGTTTGAAGGGCTTAGTTAGTTAGTTCATCGGCGGCGTATATCCTCGATCGATCATTCTCTCTCTAGACGTT //文件结束
(文件中的每一行都是一个单独的字符串,每个字符串的最大字符数为241)
这是我尝试过的,但似乎不起作用:
include <stdio.h>
FILE *input;
int main ()
{
int i=0, count=0;
char sequence[241];
/*reads DNA sequence from input, stores it in an array, and returns the # of
letters read as an int */
input=fopen("dna_input.dat", "r");
while (fscanf(input, "%c", &sequence[i++]) != EOF)
count++;
printf ("The number of letters in a sequence is: %d\n", count);
return 0;
}
【问题讨论】:
-
while循环将\n作为序列的一部分。使用fgets()。 -
fscanf返回分配的输入项的数量,而不是 EOF 指示符。此外,如果您只想从文件中读取一行,请尝试fgets,然后在结果上使用strlen。 -
为什么要逐字阅读?读取整个字符串并找到它的长度。
-
你的目标是什么,你想打印文件/你想逐行读取文件还是逐字符读取文件??
-
很抱歉给您带来了困惑。这个函数是我正在尝试调试的另一个程序的一部分。我的另一个程序中的实际函数声明是:int read_DNA(char sequence[])。目标是从输入文件中读取“DNA”序列,将其存储在数组 sequence[] 中并返回读取的字母数。