Ĺadny brzuch
Mam taki poblem. Gdybyscie zechcieli spojrzec na ten kod i pomogli mi znaleźć w nim błąd (wyjaśnić pewną sprawę):
#include<stdio.h> main() { int i, c; char s[3]; s[2] = '\0'; s[1] = 0; s[0] = 0; while((c = getchar()) != '\n' && c != EOF){ s[0] = s[1]; s[1] = c; } printf("%s", s); return 0; }
Program ma wczytywac kolejne znaki z wejścia aż do napotkania końca wiersza lub pliku, a potem chciałbym żeby drukował dwa ostatnio wczytane znaki. Wszystko działa ok gdy wiersz jest dłuzszy niz dwa znaki, ale gdy na wejściu jest tylko jeden znak to nie wyśiwetla mi nic. I tu jest pytanie dlaczego? Powinien przecież (tak chciałbym) wyświetlić 0 i ten wczytany, jedyny znak.
Wszystko działa ok gdy wiersz jest dłuzszy niz dwa znaki, ale gdy na wejściu jest tylko jeden znak to nie wyśiwetla mi nic. I tu jest pytanie dlaczego? Powinien przecież (tak chciałbym) wyświetlić 0 i ten wczytany, jedyny znak.
Dzieje się tak z bardzo prostej przyczyny. Przypisujesz s[0] i s[1] liczbę 0, natomiast aby program działał zgodnie z oczekiwaniami powinieneś przypisać do tych elementów znak '0'. Poprawny kod wygląda tak:
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include<stdio.h> main() { int i, c; char s[3]; s[2] = '\0'; s[1] = 0; s[0] = 0; while((c = getchar()) != '\n' && c != EOF){ s[0] = s[1]; s[1] = c; } printf("%s", s); return 0; }
Program ma wczytywac kolejne znaki z wejścia aż do napotkania końca wiersza lub pliku, a potem chciałbym żeby drukował dwa ostatnio wczytane znaki. Wszystko działa ok gdy wiersz jest dłuzszy niz dwa znaki, ale gdy na wejściu jest tylko jeden znak to nie wyśiwetla mi nic. I tu jest pytanie dlaczego? Powinien przecież (tak chciałbym) wyświetlić 0 i ten wczytany, jedyny znak.
Wszystko działa ok gdy wiersz jest dłuzszy niz dwa znaki, ale gdy na wejściu jest tylko jeden znak to nie wyśiwetla mi nic. I tu jest pytanie dlaczego? Powinien przecież (tak chciałbym) wyświetlić 0 i ten wczytany, jedyny znak.

Dzieje się tak z bardzo prostej przyczyny. Przypisujesz s[0] i s[1] liczbę 0, natomiast aby program działał zgodnie z oczekiwaniami powinieneś przypisać do tych elementów znak '0'. Poprawny kod wygląda tak:
