Я программировал на C, чтобы решить проблему на веб-сайте ROSALIND. код очень прост, а потому, что это так просто, это очень трудно исправить эту ошибку (я думаю) Вот мой код:.C - error after for() cicle
/* 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(), чтобы найти место ошибки. Я видел это в тот момент, как прямо перед тем, как выйти из цикла nA = 20, но момент сразу после него nA = 4200624. Что мне делать?
Почему вы ограничиваете себя 1000 входами? Это очень неестественный способ структурирования кода. Типично читать до тех пор, пока 'getchar' не вернет EOF. –
Предел составляет 1000, если вы читаете заголовок. – MoonWalker