C - ()cicle之后的错误

时间:2016-02-07 23:25:33

标签: c for-loop

我一直用C语言编写解决ROSALIND网站的问题。 代码非常简单,因为它非常简单,所以很难纠正这个错误。(我猜) 这是我的代码:

    /* A string is simply an ordered collection of symbols selected from some alphabet and formed into a word; the length of a string is the number of symbols that it contains.

An example of a length 21 DNA string (whose alphabet contains the symbols 'A', 'C', 'G', and 'T') is "ATGCTTCAGAAAGGTCTTACG."

Given: A DNA string s of length at most 1000 nt.

Return: Four integers (separated by spaces) counting the respective number of times that the symbols 'A', 'C', 'G', and 'T' occur in s. */

#include <stdio.h>

int main(){
    char nt;
    int nA, nC, nG, nT;
    for(int i = 0, nA = nC = nG = nT = 0; i < 1000; i++){
        nt = getchar();
        if(nt == 'A'){
            nA++;
        }else if(nt == 'C'){
            nC++;
        }else if(nt == 'G'){
            nG++;
        }else if(nt == 'T'){
            nT++;
        }else{
            break;
        }
    }
    printf(" %d %d %d %d", nA, nC, nG, nT);
}

当我测试这段代码时:

AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC

它应该给:

20 12 17 21

但是我的电脑给出了:

4200624 12 17 21

我已经使用printf()函数来查找错误所在的位置。我已经看到了在离开cA nA = 20之前的那一刻,但是在它之后的那一刻nA = 4200624。 我该怎么办?

2 个答案:

答案 0 :(得分:10)

我认为这是因为您正在重新声明for标头中的变量,您将变量设置为0.由于您在i之后声明了nA,因此您创建了一个具有相同名称的新变量,但是具有不同的范围。这个只在for循环中可见,但在结束后被销毁。由于您的分配链,其他变量已正确初始化。即他们被初始化,而不是重新宣布。在您声明它们的同一行中初始化变量将解决问题。

答案 1 :(得分:2)

调高编译器警告。你有两个名为&#34; nA和#34;的变量,一个是循环的局部变量,另一个是未初始化的变量,你打算将其作为结果。