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

[C] Wczytywania z klawiatury całego tekstu.

Ostatnio zmodyfikowano 2014-01-23 16:57
Autor Wiadomość
noindyfikator
Temat założony przez niniejszego użytkownika
» 2014-01-23 10:59:52
C/C++
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

struct student
{
    char index[ 100 ];
    char imie[ 100 ];
    char nazwisko[ 100 ];
    char wiek[ 100 ];
};

int main()
{
    int wybor;
    printf( "Aby zapisac studentow wcisnij 1\n" );
    printf( "Aby wczytac z pliku zapisanych studentow wcisnij 2\n" );
    printf( "Aby wyczyscic obecna baze danych wcisnij 3\n" );
    printf( "Wybor: " );
    scanf( "%d", & wybor );
   
    switch( wybor )
    {
    case 1: zapis(); break;
    case 2: odczyt(); break;
    case 3: wyczysc(); break;
        default: printf( "\nWybrales inny klawisz, bledny klawisz wut.." ); break;
    }
   
    return 0;
}

int zapis()
{
    FILE * plik;
    int licznik = 0;
    int rozmiar;
   
    system( "cls" );
    printf( "Podaj liczbe studentow: " );
    scanf( "%d", & rozmiar );
    printf( "\n" );
   
    struct student * politechnika;
    politechnika = malloc( sizeof( struct student ) * rozmiar );
   
    do
    {
        printf( "Podaj numer idenxu: " );
        scanf( "%s", politechnika[ licznik ].index );
        printf( "Podaj imie studenta: " );
        scanf( "%s", politechnika[ licznik ].imie );
        printf( "Podaj nazwisko studenta: " );
        scanf( "%s", politechnika[ licznik ].nazwisko );
        printf( "Podaj wiek studenta: " );
        scanf( "%s", politechnika[ licznik ].wiek );
        printf( "\n" );
        licznik++;
    } while( licznik < rozmiar );
   
    // plik = fopen("c:\\baza\\Baza danych do struktury.txt", "a+");
    plik = fopen( "Baza danych do struktury.txt", "a+" );
   
    for( licznik = 0; licznik < rozmiar; licznik++ ) // zapis do  pliku
    {
        fprintf( plik, "Index:%s\n", politechnika[ licznik ].index );
        fprintf( plik, "Imie:%s\n", politechnika[ licznik ].imie );
        fprintf( plik, "Nazwisko:%s\n", politechnika[ licznik ].nazwisko );
        fprintf( plik, "Wiek:%s\n", politechnika[ licznik ].wiek );
        fprintf( plik, "-----------------" );
        fprintf( plik, "\n\n" );
    }
    fclose( plik );
    return 0;
}

int odczyt()
{
    FILE * plik;
   
    system( "cls" );
    char odczyt[ 100 ];
   
    //plik = fopen("c:\\baza\\Baza danych do struktury.txt", "a+");
    plik = fopen( "Baza danych do struktury.txt", "a+" );
    while( fscanf( plik, "%s", odczyt ) != EOF ) // odczyt z pliku
    {
        printf( "%s\n", odczyt );
       
    }
   
    int powrot;
    printf( "Jezeli chcesz wrocic nacisnij 1\n" );
    printf( "Jezeli chcesz zamknac program nacisnij dowolny klawisz.\n" );
    printf( "Wybor: " );
    scanf( "%d", & powrot );
    if( powrot == 1 )
    {
        system( "cls" );
        main();
    }
    else exit( EXIT_FAILURE );
   
    fclose( plik );
    return 0;
   
}

int wyczysc()
{
    printf( "Jestes pewien ze chcesz usunac " );
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED ); // _ BACKGROUND_RED
    printf( "CALA " );
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN );
    printf( "baze danych? " );
    printf( "T/N: " );
   
    fflush( stdin );
    char odpowiedz[ 100 ];
    scanf( "%s", & odpowiedz );
    if( strcmp( odpowiedz, "T" ) == 0 || strcmp( odpowiedz, "Tak" ) == 0 || strcmp( odpowiedz, "t" ) == 0 || strcmp( odpowiedz, "tak" ) == 0 )
    {
        FILE * plik;
        plik = fopen( "Baza danych do struktury.txt", "w" );
        fclose( plik );
        system( "cls" );
       
        SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_BLUE ); // _ BACKGROUND_RED
        printf( "Baza dancych zostala wyczyszczona poprawnie =)\n\n" );
        SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN );
        main();
    }
   
    else
    {
        system( "cls" );
        main();
    }
   
    return 0;
}

mm ;p
P-102921
alixir
» 2014-01-23 11:16:31
Po 1. Nie używasz nigdzie metody podanej przeze mnie
%[ ^\n ]

Po 2. Wczytując w ten sposób zostaje ci w buforze znak nowej linii. Czyść bufor np.
fflush( stdin );
 po każdym scanf
P-102922
noindyfikator
Temat założony przez niniejszego użytkownika
» 2014-01-23 11:20:13
jak użyłem metodę podaną przez ciebie to mi program się kompilował ale po uruchomieniu wgl nie wczytywał imienia ;/
P-102924
alixir
» 2014-01-23 11:23:53
Nie mogę znaleźć przyczyny w tym momencie, więc użyj
gets( politechnika[ licznik ].imie )
 
Nie musisz wtedy czyścić bufora nawet.
P-102925
noindyfikator
Temat założony przez niniejszego użytkownika
» 2014-01-23 11:30:15
teraz o on wgl jakos dziwnie wczytuje te dane.. ;/
P-102926
alixir
» 2014-01-23 11:34:11
C/C++
#include <conio.h>
#include <iostream>

struct student
{
    char index[ 100 ];
    char imie[ 100 ];
    char nazwisko[ 100 ];
    char wiek[ 100 ];
};



int main() {
   
    FILE * plik;
    int licznik = 0;
    int rozmiar;
   
    system( "cls" );
    printf( "Podaj liczbe studentow: " );
    scanf_s( "%d", & rozmiar );
    fflush( stdin );
    printf( "\n" );
   
    struct student * politechnika;
    politechnika =( struct student * ) malloc( sizeof( struct student ) * rozmiar );
   
    do
    {
        printf( "Podaj numer idenxu: " );
        gets( politechnika[ licznik ].index );
        printf( "Podaj imie studenta: " );
        gets( politechnika[ licznik ].imie );
        printf( "Podaj nazwisko studenta: " );
        gets( politechnika[ licznik ].nazwisko );
        printf( "Podaj wiek studenta: " );
        gets( politechnika[ licznik ].wiek );
        printf( "\n" );
        licznik++;
    } while( licznik < rozmiar );
   
    // plik = fopen("c:\\baza\\Baza danych do struktury.txt", "a+");
    plik = fopen( "Baza danych do struktury.txt", "a+" );
   
    for( licznik = 0; licznik < rozmiar; licznik++ ) // zapis do  pliku
    {
        fprintf( plik, "Index:%s\n", politechnika[ licznik ].index );
        fprintf( plik, "Imie:%s\n", politechnika[ licznik ].imie );
        fprintf( plik, "Nazwisko:%s\n", politechnika[ licznik ].nazwisko );
        fprintf( plik, "Wiek:%s\n", politechnika[ licznik ].wiek );
        fprintf( plik, "-----------------" );
        fprintf( plik, "\n\n" );
    }
   
    fclose( plik );
    free( politechnika );
   
    return 0;
}
P-102927
MrPoxipol
» 2014-01-23 14:09:52
A ogólnie to celowo mieszasz C z C++ ?
W czystym C nie ma klas.
Ale są struktury i nic nie miesza.
P-102948
alixir
» 2014-01-23 14:22:45
Jak to pisałem to nie widziałem całego kodu, a na pierwszy rzut oka wyglądało to na tablicę obiektów.
P-102950
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona