[C++] wczytywanie tekstu

Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[C++] wczytywanie tekstu

Post autor: musialmi »

Jak za pomocą funkcji scanf najpierw wczytać napis, a następnie wyświetlić (za pomocą pętli while) wszystkie jego znaki do znaku +? Na przykład dla wejścia 1234+4567 wyświetlić ma 1234.
Ostatnio zmieniony 30 sty 2015, o 21:23 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C++] wczytywanie tekstu

Post autor: Andreas »

Wczytujesz zmienną napis typu string, a potem wyswietlasz znak po znaku napis[0], napis[1] dopóki nie pojawi się "+"
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[C++] wczytywanie tekstu

Post autor: musialmi »

Okej. Jak?

Kod: Zaznacz cały

string napis;
    scanf("%s",&napis);
    int i=0;
    while(scanf("%s",napis[i])!='+'){
        printf("%s",napis[i]);
        i++;
    }
    return 0;
Nie działa mi to. Tzn. kompiluje się z trzema ostrzeżeniami, a po uruchomieniu i pobraniu napisu, zawiesza.
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C++] wczytywanie tekstu

Post autor: Andreas »

Niepotrzebnie dwa razy wczytujesz.

Kod: Zaznacz cały

string napis;
scanf("%s",&napis);
int i=0;
while(napis[i])!='+'){
        printf("%s",napis[i]);
        i++;
}
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[C++] wczytywanie tekstu

Post autor: musialmi »

Faktycznie. Tylko i tak to jest lipa, bo wciąż problem jest identyczny (nic się nie zmieniło w kompilacji i działaniu) :/
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C++] wczytywanie tekstu

Post autor: Andreas »

Kod: Zaznacz cały

    string napis;
    cin >> napis;
    int i=0;
    while(napis[i] != '+')
    {
        cout << napis[i];
        i++;
    }
Teraz działa.
Awatar użytkownika
musialmi
Użytkownik
Użytkownik
Posty: 3466
Rejestracja: 3 sty 2014, o 13:03
Płeć: Mężczyzna
Lokalizacja: PWr ocław
Podziękował: 382 razy
Pomógł: 434 razy

[C++] wczytywanie tekstu

Post autor: musialmi »

Chciałbym właśnie się dowiedzieć jak scanfem to załatwić :P
Swoją drogą, jak zakończyć wyświetlanie na ostatnim znaku stringa, jeśli w napisie nie ma znaku "+"? Bo następujący kod niestety temu nie zapobiega.

Kod: Zaznacz cały

    string napis;
    cin >> napis;
    int i=0;
    while(napis[i] != '+' && napis[i] != '\n'){
        printf("%c", napis[i]);
        i++;
    }
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C++] wczytywanie tekstu

Post autor: Andreas »

A czemu nie możesz użyć cin? Chodzi ci o szybkość działania programu?

Zamiast couta możesz użyć printf("%c", napis.c_str()[i]);
A jak wczytać scanfem to nie wiem. Możesz wczytać napis jako tablicę charów albo poczytać tu:
... with-scanf
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C++] wczytywanie tekstu

Post autor: Dasio11 »

Kod: Zaznacz cały

char napis[128];
scanf( "%s", napis );
int i = 0;
while( napis[i] != '\0' && napis[i] != '+' )
{
    printf( "%c", napis[i] );
    ++i;
}
ODPOWIEDZ