Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 13

Temat: C - program usuwający spacje

  1. #1
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie C - program usuwający spacje

    Mam do napisania program, który będzie usuwał spacje z inputu i wyświetli tekst już bez spacji w outpucie.
    no więc napisałem takowy program i wszystko niby działa, ALE... nie wczytuje pierwszego znaku z pierwszego testu.
    Czyli np.:
    Input:
    To jest przykładowe zdanie.
    To jest drugie przykładowe zdanie.
    Output:
    ojestprzykładowezdanie.
    Tojestdrugieprzykładowezdanie.

    Oto kod do programu:
    // Autor: kokosoko

    #include<stdio.h>

    int main(void)
    {
    char znak;

    scanf("%c",&znak);

    while((znak=getchar()) !=EOF)
    {
    if(znak==' ')
    printf("");
    else
    printf("%c",znak);
    }
    return 0;
    }

    Nie wiem, czemu to nie działa, bo wszystko jest wg mnie ok. A napisałem już kilka programów tym sposobem i wszystkie mają ten sam błąd, więc mnie to irytuje, bo miałbym sporo zadań zrobionych więcej.
    Tak więc, jeśli ktoś mógłby mi pomóc i powiedzieć, gdzie mam błąd, to byłbym bardzo wdzięczny.

  2. #2
    Zarejestrowany
    Jan 2009
    Postów
    216

    Domyślnie

    Kod:
    #include <windows.h>
    int main(int argc, char **argv){
    HANDLE stdin, stdout;
    DWORD read, written;
    BYTE znak;
    if((stdin = GetStdHandle(STD_INPUT_HANDLE)) == INVALID_HANDLE_VALUE){
    return EXIT_FAILURE;
    }
    if((stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE){
    return EXIT_FAILURE;
    }
    while(ReadFile(stdin, &znak, sizeof(znak), &read, 0) != 0){
    if(znak != ' '){
    if(WriteFile(stdout, &znak, read, &written, 0) == 0)break;
    }
    }
    return EXIT_FAILURE;
    }

  3. #3
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie

    Cytat Napisał esp666 Zobacz post
    Kod:
    #include <windows.h>
    int main(int argc, char **argv){
    HANDLE stdin, stdout;
    DWORD read, written;
    BYTE znak;
    if((stdin = GetStdHandle(STD_INPUT_HANDLE)) == INVALID_HANDLE_VALUE){
    return EXIT_FAILURE;
    }
    if((stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE){
    return EXIT_FAILURE;
    }
    while(ReadFile(stdin, &znak, sizeof(znak), &read, 0) != 0){
    if(znak != ' '){
    if(WriteFile(stdout, &znak, read, &written, 0) == 0)break;
    }
    }
    return EXIT_FAILURE;
    }
    Dzięki, że się fatygowałeś i pisałeś cały program, ale mi chodzi jednak by znaleźć jedynie błąd, bo i tak dosłownie nic nie kumam z tego kodu, a nie będę go kopiował, bo to bez sensu, gdyż i tak mi to nic nie da oprócz kilku punktów za zadanie, a poza tym się niczego nie nauczę i jeszcze mogę miec problemy za oszustwo.

    Tak więc prosiłbym jedynie o znalezienie błędu u mnie, a nie pisanie nowego programu (aczkolwiek doceniam to, esp666 ).
    Ostatnio edytowane przez kokosoko : 03-03-2009 - 22:33

  4. #4
    mqk
    mqk jest offline
    Zarejestrowany
    Feb 2009
    Postów
    6

    Domyślnie

    wywal linijke przed petla >> scanf("%c",&znak);
    Ostatnio edytowane przez mqk : 03-04-2009 - 11:13

  5. #5
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie

    Cytat Napisał mqk Zobacz post
    wywal linijke przed petla >> scanf("%c",&znak);
    Dzięki wielkie! Bardzo mi pomogłeś.

  6. #6
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie

    A zastanawiam się teraz, jak by można zrobić, żeby pierwsza litera po spacji była wielka.
    Czyli np:
    Input:
    To jest pierwsze zdanie próbne.
    To jest drugie zdanie próbne.
    Output:
    ToJestPierwszeZdaniePróbne.
    ToJestDrugieZdaniePróbne.

    Próbowałem zrobić przez dodanie: char -> znak2, ale nie udało się.
    Chodzi mi choćby o algorytm, a nie o kod, bo nawet nie umiem wpaść na pomysł, jak to zrobić.

  7. #7
    Zarejestrowany
    Jun 2008
    Postów
    36

    Domyślnie

    skorzystaj z pętli
    zprawdź czy występuje spacja
    jeśli np

    znak[i] = ' ' //(spacja)
    //zmien spacje na cos tam
    znak[i+1] = toupper(znak[i+1]); //zmien first znak po spacji na Duży

    kumasz czacze
    Ostatnio edytowane przez Egoalter : 03-06-2009 - 15:50
    mam fryzure na Hitlera - jest k00l

  8. #8
    Avatar Mandr4ke
    Mandr4ke jest offline Bez Teamowiec
    Zarejestrowany
    Oct 2008
    Skąd
    W Sieci !!!
    Postów
    282

    Domyślnie

    Cytat Napisał Egoalter Zobacz post

    kumasz czacze

    Czaczy się nie kuma... Czacze się tańczy...
    "Wszystkie komputery PC są kompatybilne, ale niektóre są kompatybilniejsze od innych... Twój jest zawsze mniej kompatybilny..."

  9. #9
    Zarejestrowany
    Feb 2009
    Postów
    51

    Domyślnie

    Cytat Napisał Egoalter Zobacz post
    skorzystaj z pętli
    zprawdź czy występuje spacja
    jeśli np

    znak[i] = ' ' //(spacja)
    //zmien spacje na cos tam
    znak[i+1] = toupper(znak[i+1]); //zmien first znak po spacji na Duży

    kumasz czacze
    Ale do tego bym musiał użyć tablic, których jeszcze nie miałem i nie rozumiem.
    Nie da się jakoś zrobić bez tablic?

  10. #10
    Zarejestrowany
    Jun 2008
    Postów
    36

    Domyślnie

    Pomyśl trochę
    wiadomo że znak który chcesz zamienić na duży
    występuje w następnym przeskoku pętli
    po wystąpieniu spacji
    Ogólnie spacja to twój punkt odniesienia
    wiadomo że wystąpi w zdaniu
    Bo zdanie w brew temu co mówią na lekcjach j.polskiego składa się
    ze stringów i spacji lol
    co do innych znaków nie ma takiej pewności
    Jak masz 'punkt odniesienia' to reszta = pikuś
    Ostatnio edytowane przez Egoalter : 03-07-2009 - 11:06
    mam fryzure na Hitlera - jest k00l

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. program zdalnie otwierajacy inny program:P
    By northdakota in forum C/C++
    Odpowiedzi: 9
    Autor: 02-28-2009, 00:48
  2. Odpowiedzi: 8
    Autor: 07-26-2008, 10:05
  3. Odpowiedzi: 2
    Autor: 04-10-2008, 22:08
  4. program
    By Goku1994 in forum Hacking
    Odpowiedzi: 9
    Autor: 08-05-2007, 16:51

Tagi

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj