Programiranje u C-u

  

Rukovanje unosom podataka u C-u
scanf()  ima problema kada se od korisnika očekuje da unese integer, a on umjesto toga unese string i tada se program sruši. Ovo se može spriječiti na način da se svi podaci koji se unose čitaju kao string (upotrebom  getchar()), i onda konvertiraju  u ispravan tip podataka. 

/* prvi primjer, čita tekst linije  */
#include <stdio.h>
#include <ctype.h>
#define MAXBUFFERSIZE   80

void cleartoendofline( void );  /* ANSI prototip funkcije */
void cleartoendofline( void )
{
        char ch;
        ch = getchar();
        while( ch != '\n' )
                ch = getchar();
}

main()
{
        char    ch;                     /* uneseni podatak */
        char    buffer[MAXBUFFERSIZE];  /* dovoljna veličina za čitavu liniju */
        int     char_count;             /* broj učitanih karaktera po liniji */
        int     exit_flag = 0;
        int     valid_choice;

        while( exit_flag  == 0 ) {
                printf("Unesite tekst linije (<80 char znakova)\n");
                ch = getchar();
                char_count = 0;
                while( (ch != '\n')  &&  (char_count < MAXBUFFERSIZE)) {
                        buffer[char_count++] = ch;
                        ch = getchar();
                }
                buffer[char_count] = 0x00;      /* oznaka kraja niza */
                printf("\nUnesena linija je:\n");
                printf("%s\n", buffer);
                valid_choice = 0;
                while( valid_choice == 0 ) {
                        printf("Nastaviti (D/N)?\n");
                        scanf(" %c", &ch );
                        ch = toupper( ch );
                        if((ch == 'D') || (ch == 'N') )
                                valid_choice = 1;
                        else
                                printf("\007Pogreška: pogrešan unos\n");
                        cleartoendofline();
                }
                if( ch == 'N' ) exit_flag = 1;
        }
}

Primjer, koji čita broj kao string

/* drugi primjer, čita brojeve kao string */
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAXBUFFERSIZE   80

void cleartoendofline( void );          /* ANSI  prototip funkcije */
void cleartoendofline( void )
{
        char ch;
        ch = getchar();
        while( ch != '\n' )
                ch = getchar();
}

main()
{
        char    ch;                     /* uneseni podatak */
        char    buffer[MAXBUFFERSIZE];  /* dovoljna veličina za čitavu liniju */
        int     char_count;             /* broj učitanih karaktera po liniji */
        int     exit_flag = 0, number, valid_choice;
        while( exit_flag  == 0 ) {
                valid_choice = 0;
                while( valid_choice == 0 ) {
                        printf("Unesite broj između 1 i 1000\n");
                        ch = getchar();
                        char_count = 0;
                        while( (ch != '\n')  &&  (char_count < MAXBUFFERSIZE)) {
                                buffer[char_count++] = ch;
                                ch = getchar();
                        }
                        buffer[char_count] = 0x00;      /* oznaka kraja niza */
                        number = atoi( buffer );
                        if( (number < 1) || (number > 1000) )
                                printf("\007Pogreška. Broj je izvan opsega 1-1000\n");
                        else
                                valid_choice = 1;
                }
                printf("\nBroj koji ste unijeli je:\n");
                printf("%d\n", number);

                valid_choice = 0;
                while( valid_choice == 0 ) {
                        printf("Nastaviti (D/N)?\n");
                        scanf(" %c", &ch );
                        ch = toupper( ch );
                        if((ch == 'D') || (ch == 'N') )
                                valid_choice = 1;
                        else
                                printf("\007Pogreška: pogrešan unos\n");
                       cleartoendofline();
                }
                if( ch == 'N' ) exit_flag = 1;
        }
}
Drugi primjeri

©Copyright B Brown. 1984-1998. All rights reserved.