int main( void ) // program kopiowania z stdin na stdout { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar (); }
// 1. zamiana programu jak wyżej na program wykorzystujący formę skrótową // (po sprawdzeniu działania programu oryginalnego, należy go wykomentować w całości, // a następnie napisać (odkomentować) wersję skróconą (poniżej) // while( (c = getchar()) != EOF) { putchar(c); } // - po sprawdzeniu poprawności działania wprowadzenie kończenia wczytywania // po wpisaniu znaku końca linii
// 2. Dodanie wczytywania do tablicy znaków // - definicja tablicy przed pętlą (z zadaną maksymalna długością napisu) // - po wczytaniu do zmiennej c i wypisaniu na ekranie, podstawienie do tablicy // - uwaga na zakończenie tablicy: // - długość nie może być zbyt duża (wprowadzenie nowych warunków) // - koniec musi byc zawsze zgodny z konwencją
// 3. Dodanie wypisywania wczytanych znaków jako liczb całkowitych
// Program switch.c - w innym pliku
całkiem możliwe, że nadinterpretowuje to zadanie, a rozwiązanie jest jakieś proste.. czekam na pomoc, bo już długo nad tym siedzę. Liczę na podpowiedzi
@tomekszz: Dobrze rozumiem pierwsze, ze to po prostu zamienić odpowiednie linijki z oryginalnego programu na to, co zakomentowane w treści zadania? Sformułowane tak, że nie wiem xd A jeśli dobrze rozumiem to jaki masz z tym problem?
@radekr: chyba tak, mam to akuratnie zrobione. Problem mam z tą tablicą i żeby do tablicy przenieść symbole wpisane z klawiatury i później ją wyświetlić.
@tomekszz: Ale jaki masz problem konkretnie? Pokaż co masz w tej chwili i napisz co konkretnie nie działa/który krok jest nie do przejścia. Umiesz tablicę zrobić? Jak nie to szukałeś w google jak zrobić? A co do przeniesienia - no masz znak wczytany już do zmiennej c, umiesz go przypisać do komórki w tablicy? A jak nie to znowu - googlałeś jak to zrobić? No i wypisanie też chyba powinno
@tomekszz: no dynamiczna tablica - wczytujesz wielkość tablicy (tam jest napisane "zadana" wielkość tablicy więc możesz nie wczytywać z klawiatury tylko dać int n=ilestsm), potem char array [n], potem kazdy znak array[i] = znak w whileu? dodatkowo w uwagach masz żeby uważać na wielkość tablicy, więc możesz zrobić jeszcze counter=0 i w tym whileu inktementiwac, jeżeli wieksze od n to break i napis że za duzo
@radekr: bez tablicy wypisuje mi znaki wpisane tak jakby w kolumnie i tak cały czas (program się nie kończy), a ja bym chciał żeby te elementy które są wypisywane dodać do każdej iteracji tablicy (począwszy od zera do ostatniego elementu). Mam mieć wcześniej zdefiniowaną wielkość tablicy (20) i np jak wpisze znak: 345623, to każda z tych liczb musi być przypisana do tablicy i tak aż do momentu kiedy tablica
@tomekszz: Nie wiem czy rozumiem, np. "wpisane w kolumnie" - masz na myśli, że każda litera jest w oddzielnej linii? Jak klikasz enter podając literę to następna już się wypisze po tym jak kliknąłeś enter, czyli stworzyłeś nową linię, więc będzie w nowej linii. A ponadto klikając enter na klawiaturze nie produkujesz znaku "EOF", a '\n', więc cały czas wracasz do poczatku while'a. Musisz więc podmienić != EOF na !=
@tomekszz: Ta linijka nie ma sensu. W c przed pętlą nic nie masz, a i tablica[20] wpisuje tylko do komórki o indeksie 20, a musisz wstawiać kolejne znak, po znaku (pomiając już to, że nie masz komórki o indeksie 20, bo robiąc tablicę 20-elementową masz komórki z indeksami 0-19). Poszukaj jak się dodaje elementy do tablicy w pętli.
@radekr: fakt, kiepsko u mnie z myśleniem ostatnio. Żeby wpisać do danej komórki wskazaną wartość, to mogę np zastosować pętlę for, z tym że wcześniej definiowałem tą tablicę jako char i to chyba też nie zadziała:
printf("Wypisujemy naszą tablicę: \n"); for (int i = 0; i < 21; i++){ tablica[i] = (tu nwm co wpisać) printf("\ntablica[%i] = %p", i, ...); }
@radekr: A i nie można tak zmienić warunku w pętli while, bo porównujemy różne typy. Taki mam błąd: kopiowanie.c:18:26: warning: comparison between pointer and integer ('int' and 'char *') [-Wpointer-integer-compare] while( (c = getchar()) != ("\n")) { ~~~~~~~~~~~~~~~ ^ ~~~~~~
@tomekszz: Wpisujesz to, co ma się znaleźć w tej komórce. W Twoim przypadku to będzie c. Zatem wewnątrz pętli będziesz miał tablica[i] = c;. Tylko nie masz w swojej pętli i, więc musisz to dorobić by wiedzieć do której komórki wpisać. Może póki co tyle podpowiedzi tutaj, pokombinuj sam jak zrobić by była też zmienna i.
#include
int main( void ) // program kopiowania z stdin na stdout
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar ();
}
// 1. zamiana programu jak wyżej na program wykorzystujący formę skrótową
// (po sprawdzeniu działania programu oryginalnego, należy go wykomentować w całości,
// a następnie napisać (odkomentować) wersję skróconą (poniżej)
// while( (c = getchar()) != EOF) { putchar(c); }
// - po sprawdzeniu poprawności działania wprowadzenie kończenia wczytywania
// po wpisaniu znaku końca linii
// 2. Dodanie wczytywania do tablicy znaków
// - definicja tablicy przed pętlą (z zadaną maksymalna długością napisu)
// - po wczytaniu do zmiennej c i wypisaniu na ekranie, podstawienie do tablicy
// - uwaga na zakończenie tablicy:
// - długość nie może być zbyt duża (wprowadzenie nowych warunków)
// - koniec musi byc zawsze zgodny z konwencją
// 3. Dodanie wypisywania wczytanych znaków jako liczb całkowitych
// Program switch.c - w innym pliku
całkiem możliwe, że nadinterpretowuje to zadanie, a rozwiązanie jest jakieś proste.. czekam na pomoc, bo już długo nad tym siedzę. Liczę na podpowiedzi
#programowanie #jezykc #informatyka
Umiesz tablicę zrobić? Jak nie to szukałeś w google jak zrobić?
A co do przeniesienia - no masz znak wczytany już do zmiennej c, umiesz go przypisać do komórki w tablicy? A jak nie to znowu - googlałeś jak to zrobić?
No i wypisanie też chyba powinno
@radekr:
!= EOFna!=#include
int main( void ) // program kopiowania z stdin na stdout
{
int c;
//c = getchar();
@tomekszz: Ta linijka nie ma sensu. W c przed pętlą nic nie masz, a i tablica[20] wpisuje tylko do komórki o indeksie 20, a musisz wstawiać kolejne znak, po znaku (pomiając już to, że nie masz komórki o indeksie 20, bo robiąc tablicę 20-elementową masz komórki z indeksami 0-19). Poszukaj jak się dodaje elementy do tablicy w pętli.
printf("Wypisujemy naszą tablicę: \n");
for (int i = 0; i < 21; i++){
tablica[i] = (tu nwm co wpisać)
printf("\ntablica[%i] = %p", i, ...);
}
while( (c = getchar()) != ("\n")) {
~~~~~~~~~~~~~~~ ^ ~~~~~~
@tomekszz: Wpisujesz to, co ma się znaleźć w tej komórce. W Twoim przypadku to będzie c. Zatem wewnątrz pętli będziesz miał
tablica[i] = c;. Tylko nie masz w swojej pętlii, więc musisz to dorobić by wiedzieć do której komórki wpisać. Może póki co tyle podpowiedzi tutaj, pokombinuj sam jak zrobić by była też zmiennai.A co do warninga -