Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wczytywanie znaków ze standardowego wejscia

Ostatnio zmodyfikowano 2015-02-22 23:27
Autor Wiadomość
natka
Temat założony przez niniejszego użytkownika
Wczytywanie znaków ze standardowego wejscia
» 2015-02-22 20:11:44
Witam. Mam napisać programik który wczytuje wyrazy z wejścia. Każdy znak ma podwoić z wyjątkiem znaku nowej linii (więc musi być możliwość wpisania kilku linii).
Rozwiązałam to w ten sposób, że podajemy ile linii chcemy wprowadzić. Gdy było to napisane Scanf i tylko jedna linia to działało.

Obecnie mój kod wygląda tak i się wszystko sypie.
C/C++
#include <stdio.h>
using namespace std;
int main( void )
{ int linie[ 1 ];
    char tablica[ 100 ];
    printf( "Podaj ilsc linii które chcesz wprowadzic:  \n" );
    scanf( "%d", linie );
    printf( "Podaj tekst:  \n" );
   
    char tablica2[ 200 ];
    int zm = 1;
    int i = 0;
    int zmienna;
    int k = 0;
    for( i = 0; i <=* linie; i++ )
    {
        scanf( "%s", tablica );
        for( zmienna = 0; zmienna >= sizeof( tablica ); zmienna++ ) {
            tablica2[ k ] = tablica[ i ];
            tablica2[ k + 1 ] = tablica[ i ];
            k = k + 2; }
        printf( "%s\n", tablica );
        //printf("%lu\n",sizeof(tablica));
        printf( "%s\n", tablica2 );
    }
   
    //fgets(tablica, sizeof(tablica), stdin);
   
    //tablica2[k]=zmienna;
    //tablica2[k+1]=zmienna;
    //k=k+2;
   
    /*for(i=0; i<(sizeof tablica / sizeof *tablica);i++)
   
    {
   
    tablica2[k]=tablica[i];
    tablica2[k+1]=tablica[i];
    k=k+2;*/
    //printf("%c\n", tablica2[k]);
    //}
   
   
   
   
   
    //scanf("%*[^\n]", sizeof(tablica)-1, tablica);
   
   
    //for(i=0; i<(sizeof tablica / sizeof *tablica);i++)
   
    //{
   
    //tablica2[k]=tablica[i];
    //tablica2[k+1]=tablica[i];
    //k=k+2;
    //printf("%c\n", tablica2[k]);
    //}
   
    printf( "%s\n", tablica2 );
    return 0;
   
}
Ktoś ma jakiś pomysł, jak to naprawić, żeby w miarę działało?
P-127156
Brunon3
» 2015-02-22 20:13:27
<< delete >>
P-127157
pekfos
» 2015-02-22 20:15:21
Się sypie, czyli co? Błąd wykonania?
P-127158
natka
Temat założony przez niniejszego użytkownika
» 2015-02-22 20:17:27
Kompiluje się (g++ na linuksie), cos sobie wypisuje ale to nie o to co chodzi.
jest problem w pętlach for :(
P-127159
pekfos
» 2015-02-22 20:20:06
C/C++
for( i = 0; i <=* linie; i++ )
{
    scanf( "%s", tablica );
    for( zmienna = 0; zmienna >= sizeof( tablica ); zmienna++ ) {
        tablica2[ k ] = tablica[ i ];
Gdzie w tym sens? Warunki w obu pętlach mają złe operatory, a przypisanie tablica[i] co niby robi? i to numer linii, a miał być numer znaku w tablicy źródłowej. Zmień nazwę zmiennej dla pierwszej pętli, dopisz zerowanie i inkrementację i w odpowiednich miejscach. I najlepiej zrób wszystko, a nie na raty..
P-127160
michal11
» 2015-02-22 20:22:31
Po co ci tablica jednoelementowa ?
Widzę w twoim programie sporo niepotrzebnych rzeczy.
Musisz pisać w C czy może być c++ ?
Poczytaj o dynamicznej alokacji, przyda ci się jeżeli chcesz to zrobić "ładnie".
Jeżeli chcesz zrobić to w taki sposób, że będziesz miała tablice wyrazów to musisz zrobić sobie tablicę dwuwymiarową charów. Wtedy wystarczy tylko w pętli wczytywać do każdego wiersza wyraz, mniej więcej będzie to wyglądało  tak:
C/C++
for( int i = 0; i < iloscWyrazow; ++i )
{
    scanf( "%s", tablica[ i ] );
}
P-127161
natka
Temat założony przez niniejszego użytkownika
» 2015-02-22 20:39:37
Nie musi być koniecznie w C. Może być w C++, ale pod Linuxem ;)
Jest jakieś proste rozwiązanie dla C++ ? Bo z tablicami coś mi nie idzie.
P-127163
Lora
» 2015-02-22 21:05:27
Możesz użyć obiektu string i do pobierania tekstu używać funkcji getline
C/C++
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string tekst;
    getline( cin, tekst, '#' );
}

Trzeci argument funkcji getline określa znak, którym zakańczasz pobieranie tekstu. Czyli teraz wprowadzając tekst możesz normalnie naciskać enter, żeby dodać kilka lini, a wpisany tekst zakończyć poprzez dodanie znaku #. Do pojedynczej litery string możesz się dobrać normalnie przez operator [] :
tekst[ 0 ] = 'c'
, a przedłużać string możesz po prostu przez operator += :
tekst += 'a'
. I to już w pętli rób.
P-127167
« 1 » 2
  Strona 1 z 2 Następna strona