Επιστροφή ακεραίου 0 μετά από ανάγνωση χαρακτήρα-ων

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Επιστροφή ακεραίου 0 μετά από ανάγνωση χαρακτήρα-ων

Δημοσίευση από katerinaaa » 26 Οκτ 2010 00:17

Γεια σας,
προσπαθώ να φτιάξω μια συνάρτηση η οποία να επιστρέφει έναν αριθμό εντός συγκεκριμένων ορίων a και b.
Αν πληκτρολογήσω μη επιθυμητούς αριθμούς και μετά έναν έγκυρο τότε όλα ΟΚ.
Αν πληκτρολογήσω κατά λάθος κάποιον χαρακτήρα είδα ότι η συνάρτηση επιστρέφει 0
και δυστυχώς μου δημιουργεί πρόβλημα στο project.

Δοκίμασα να αρχικοποιήσω την τιμή της μετβλητής σε κάποια τιμή πολύ μεγάλη που να μη ε ενδιαφέρει όπως 100 αλλά δεν ήταν εκεί το πρόβλημα.


Μπορεί κάποιος να με βοηθήσει να λύσω το πρόβλημα ?
Ευχαριστώ εκ των προτέρων


Ο κώδικας μου είνα ο ο εξής

Κώδικας: Επιλογή όλων

int get_choice (int a, int b)
{
        int choice,length_buffer;
	int i=0;
	int invalid=FALSE;
	char buffer[100];

	
	scanf ("%s", buffer);  
	length_buffer = strlen(buffer);

	for &#40; i = 0 ; i < length_buffer ; i++ &#41;	
	&#123;
		if &#40; isdigit&#40;buffer&#91;i&#93;&#41; == 0&#41;
		&#123;
			invalid = TRUE;
			break;
	        &#125;
	&#125;


        if &#40;invalid == TRUE&#41;
       &#123;
        printf&#40;"\n\t  character Found\n"&#41;;
        printf&#40;"try again &#58; "&#41;;

        	
        choice = get_choice &#40;a,b&#41;;
	&#125;

	choice = atoi&#40;buffer&#41;;



          if&#40; &#40;choice>=a&#41; && &#40;choice<=b&#41;&#41;
	&#123;
	    	invalid = FALSE;

	&#125;else&#123;
                printf&#40;"\n\t Error\n"&#41;;	
		printf&#40;"try again &#58; "&#41;;
		invalid = TRUE;
	    
                choice = get_choice &#40;a,b&#41;;
	&#125;

	
return choice;
&#125;


Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Επιστροφή ακεραίου 0 μετά από ανάγνωση χαρακτήρα-ων

Δημοσίευση από virxen75 » 26 Οκτ 2010 02:53

για πιο λόγω την κάνεις αναδρομική?

χρησιμοποίησε ένα while-loop καλύτερα.


Υ.Γ. στείλε και την εκφώνηση

katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Επιστροφή ακεραίου 0 μετά από ανάγνωση χαρακτήρα-ων

Δημοσίευση από katerinaaa » 26 Οκτ 2010 13:01

virxen75 έγραψε:για πιο λόγω την κάνεις αναδρομική?

χρησιμοποίησε ένα while-loop καλύτερα.


Υ.Γ. στείλε και την εκφώνηση
Νόμιζα ότι κάνοντάς την αναδρομική θα είναι πιο εύκολη η υλοποίηση.
Τι θα αλλάξει αν το κάνω while loop πάλι όταν πληκτρολογώ χαρακτήρα 0 δε θα στέλνει ?

Δεν έχει σημασία η εκφώνηση.
Να φτιάξουμε ένα cl/ser σύστημα που επιτελεί κάποιες λειτουργίες και χρησιμοποιεί shared memory.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Επιστροφή ακεραίου 0 μετά από ανάγνωση χαρακτήρα-ων

Δημοσίευση από virxen75 » 26 Οκτ 2010 16:38

φτιάξε το με while loop και θα δεις ότι θα δουλέψει!

Υ.Γ. στείλε εδώ τον κώδικα που θα φτιάξεις με while loop αν δεν σου δουλέψει να στο φτιάξω.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Επιστροφή ακεραίου 0 μετά από ανάγνωση χαρακτήρα-ων

Δημοσίευση από virxen75 » 30 Οκτ 2010 18:12

δοκίμασε το έτσι

Κώδικας: Επιλογή όλων


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int get_choice &#40;int, int&#41;;
int main&#40;&#41;&#123;
    printf&#40;"\n epilogi=%d ",get_choice&#40;10,100&#41;&#41;;
    getchar&#40;&#41;;
    return 0;
&#125;


int get_choice &#40;int a, int b&#41;&#123;
   int choice,length_buffer;
   int i=0;
   int invalid=TRUE;
   char buffer&#91;100&#93;;

   while &#40;invalid&#41;&#123;
        invalid=FALSE;
        printf&#40;"choice from %d to %d&#58; ",a,b&#41;;
        scanf &#40;"%s", buffer&#41;; getchar&#40;&#41;;
        length_buffer = strlen&#40;buffer&#41;;

        for &#40; i = 0 ; i < length_buffer ; i++ &#41;&#123;
            if &#40; isdigit&#40;buffer&#91;i&#93;&#41; == 0&#41;&#123;
                invalid = TRUE;
                break;
            &#125;
        &#125;
        if &#40;invalid == TRUE&#41;&#123;
            printf&#40;"\n\t  character Found\n"&#41;;
            printf&#40;"try again !!!\n"&#41;;
        &#125;else&#123;
            choice = atoi&#40;buffer&#41;;
            if&#40;choice<a || choice>b&#41;&#123;
                printf&#40;"\n\t Error\n"&#41;;   
                printf&#40;"try again ,value must be from %d to %d !!!\n",a,b&#41;;
                invalid = TRUE;
            &#125;
        &#125;
        
    
   &#125; 
return choice;
&#125; 


katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Επιστροφή ακεραίου 0 μετά από ανάγνωση χαρακτήρα-ων

Δημοσίευση από katerinaaa » 01 Νοέμ 2010 19:02

ευχαριστώ πολύ virxen

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης