Wpis z mikrobloga

Siema, potrzebuję pomocy z małym zadaniem z programowania w języku C, a mianowicie (treść jest zakomentowana):

#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
  • 14
@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?
@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 być
Dobrze rozumiem pierwsze, ze to po prostu zamienić odpowiednie linijki z oryginalnego programu na to, co zakomentowane w treści zadania?


@radekr:

hmmm

- po sprawdzeniu poprawności działania wprowadzenie kończenia wczytywania

// po wpisaniu znaku końca linii


Wygląda, że trzeba chyba sprawdzać nie tylko EOF, ale i \n. Ale... gwarancji nie ma :P to jest tak napisane że w sumie tak na prawdę ciężko powiedzieć.
@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 zostanie
@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 != '\n'
#include

int main( void ) // program kopiowania z stdin na stdout
{
int c;
//c = getchar();
//while (c != EOF) {
//putchar(c);
//c = getchar ();
//}

char tablica[20]; //definicja tablicy
tablica[20] = c;
// 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()) != ("\n"))
tablica[20] = c


@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")) {
~~~~~~~~~~~~~~~ ^ ~~~~~~
tablica[i] = (tu nwm co wpisać)


@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.

A co do warninga - po