Witam.
Próbuję wykorzystać getchar do wczytania liczby do tablicy korzystając z
i=1;
n=((int)(getchar()))-48;
while((n>=0)&&(n<10))
{
taba[i]=n;
i+=1;5
n=((int)(getchar()))-48;
ilea+=1;
}
tu wszystko działa raczej poprawnie, moje pytanie brzmi, czy da się to zrobić tak by przerywało pętlę, od razu gdy zostanie wpisane coś innego niż cyfra, a nie czekało na enter.
Druga część mojego problemu wiąże się z programem, który piszę do szkoły (właściwie to ten sam program), mam dwie tablice zapełnione jak wyżej (taba[] i tabb[]) i tabw[] do której mam umieścić wynik dodawania pisemnego, napisałem kod, który według mnie powinien to robić, lecz niestety w niektórych przypadkach podaje dziwne wyniki i od dłuższego czasu nie mogę znaleźć pomysłów dlaczego.
for(i; i>0; i-=1)
{
tabw[i]+=taba[i]+tabb[i];
if (tabw[i]>9){
tabw[i-1]+=(taba[i]+tabb[i])/10;
tabw[i]=(taba[i]+tabb[i])%10;
}
}
</del></del>
Pozdrawiam i z góry dziękuję za wszelką pomoc.
Edit: drobna zmiana kodu rozwiązała mi drugi problem, popełniałem wtedy bardzo prymitywny błąd i przypisywałem wartości bez odpowiednich sprawdzeń i się nadpisywały w złych miejscach, aktualnie kod wygląda tak
for(i=ilea; i>0; i-=1)
{ c=taba[i]+tabb[i]+tabw[i];
if (c<10){
tabw[i]=c;
}
else if (c>9){
tabw[i-1]+=c/10;
tabw[i]=c%10;
}
}
Nie mogę znaleźć powodu, dlaczego działa to źle dla liczb poprzedzonych zerami. Czy może to być spowodowane tym, że do wpisania drugiej liczby używam:
i=1;
scanf(" %1i",&n);
while((n>=0)&&(n<10))
{
tabb[i]=n;
i+=1;
n=((int)(getchar()))-48;
}
Jest to zaraz po wpisywaniu pierwszej liczby, liczby wpisuje się oddzielając spacją i gdy mają równą długość, i druga nie zaczyna się od zer to działa poprawnie (154 154 -> 308, 999 197 -> 1196, 001 111 -> 112 etc.) lecz jeżeli druga zaczyna się od zer to jest ona mnożona przez 10 (123 001 -> 133 zamiast 124 etc.)