Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    C - acquisizione di caratteri con scanf

    ciao a tutti.sto realizzando un progetto per l'università e premetto di non essere troppo ferrato in c(abbiamo sempre programmato in java).

    mi ritrovo a dover acquisire tre caratteri con scanf.questi caratteri vanno a comporre un codice formato da un numero,il carattere # ed un altro numero.i numeri devono essere compresi fra 1 e 5.ho provato questo codice:

    char cod[1024];

    do{
    scanf("%3s",cod);
    }while( atoi(cod[0])<1 || atoi(cod[0])>5 || atoi(cod[0])==0 || atoi(cod[2])<1 || atoi(cod[2]>5 || atoi(cod[2]==0 || strcmp(cod[1],"#")!=0 );
    printf("\nFUNZIONA!\n");

    praticamente continua a chiedere tre caratteri,ed assumine esattamente tre,finchè non si inserisce un codice valido.ad esempio 1#2.
    il problema è che mi da segmentation fault.ho provato con un array di 4 elementi(i tre char e lo /0,visto che i char occupano un byte in memoria),ho provato con due int per i numeri e un char per l'hash facendo una scanf multipla così scanf("%c%d%c",&num1,&hash,&num2),però non sono riuscito a risolvere.sono sicuro che mi sfugge qualcosa legata agli array in c,cioè indirizzi di memoria,non accessibilità al primo elemento,ecc.
    qualcuno può aiutarmi?
    mi scuso preventivamente se:dovevo presentarmi e non l'ho fatto(mi ero iscritto tempo fa e non ricordo se si doveva fare e se l'ho fatto),dovevo scrivere il messaggio in un determinato modo e non l'ho fatto,o se ho esposto male il problema.
    grazie a tutti quelli che risponderanno.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'errore lo causa quella strcmp ... ma il fatto è che è usata male ...

    Non ho capito bene i criteri di validità dell'input ... come deve essere fatto per essere valido? Puoi indicarlo semplicemente con quale esempio di codice valido/non valido?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    250
    Non ti basterebbe aggiungere una condizione al while..?

    ...||(cod[1]!='#'))

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Mi sembra che anche atoi() sia usata male !?
    dall'esempio non hai bisogno di convertire i caratteri in numero , lavora direttamente con i caratteri , a mio avviso sarà più semplice


    codice:
    char cod[1024]; //Forse è una dimensione eccessiva per tre caratteri :)
    do{
    scanf("%3s",cod);
    }while( cod[0]<'1' ||cod[0]>'5'|| cod[2]<'1' || cod[2]>'5' || cod[1]!='#' );
    printf("\nFUNZIONA!\n");
    Tecnologia

  5. #5
    grazie mille!per quanto riguarda lo strcmp potevo arrivarci...era inutile!invece per gli interi non sapevo che il < e il > funzionassero anche se applicativi a dei char.così facendo il controllo include anche la restrizione che si inseriscano due interi!ora va a meraviglia.

    ps: l'input corretto è ad esempio 1#2, o comunque qualsiasi input che abbia il primo carattere(che dev'essere un numero)compreso fra 1 e 5.stessa cosa per il terzo carattere.mentre il secondo dev'essere il #.
    all'array ho dato dimensione 4.tre caratteri più il terminatore.giusto no?!

    comunque risolto!si può chiudere grazie ancora

  6. #6
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Forse è meglio che ti chiarisca un po

    se fai , if('A' < 'B')

    è come se facessi un confronto con i codici ascii

    if(65<66)

    visto che nel codice ascii i caratteri 0,1,2,3...9 sono consecutivi

    è vero che ascii 1 > di ascii 0 e ascii 5 < di ascii 6

    quindi li puoi usare nelle espressioni come se usassi numeri da 0 a 9

    spero di essermi spiegato bene
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.