Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα,

 

φτιαχνω ενα προγραμματακι στην C,στο οποιο ο χρηστης εισαγει διαφορα γραμματα ή αριθμους,και γινονται διαφορες λειτουργιες.

θελω τωρα με καποιον τροπο να αναγνωρισω αν ο χρηστης εισαγει εναν αριθμο,και αν εισαγει εναν αριθμο να κανω διαφορετικες λειτουργιες.

 

πως μπορω να αναγνωρισω αν εισαγει αριθμο λοιπον ο χρηστης?

 

προτιμηταιο ειναι να μην χρησιμοποιηθει καμια βιβλιοθηκη αριθμων ή κατι τετοιο,παρα μονο η παλια καλη stdio.h,εκτος αν φυσικα κατι τετοιο δεν ειναι εφικτο.

 

ευχαριστω εκ των προτερων

  • Απαντ. 34
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Συχνή συμμετοχή στο θέμα

Δημοσ.

scanf ?

ναι,τι ακριβως να κανω με την scanf(); ομως?πως να την χρησιμοποιησω για να "ανιχνευσω" το ειδος του χαρακτηρα που εισαγεται απο τον χρηστη?

Δημοσ.

Πες μας τι ακριβώς θες να κάνεις με τα data που διαβάζεις ή δώσε μας ένα παράδειγμα για να μπορέσουμε να βοηθήσουμε, γιατί είναι πολύ γενικό αυτό που ρωτάς στο αρχικό ποστ.

 

Σε γενικές γραμμές, πάντα διαβάζεις χαρακτήρες και κατόπιν τους μετατρέπεις σε ότι θέλεις ανάλογα με τις ανάγκες σου. Αυτό κάνει και η scanf(), η οποία ως "ανάγκες" θεωρεί τα type specifiers που βάζεις στο format string της.

Δημοσ.

Αν ο ASCII αριθμός του χαρακτήρα που εισάγει ο χρήστης είναι μεγαλύτερος ή ίσος με το 48 και μικρότερος ή ίσος του 57 τότε είναι αριθμός.

Δημοσ.

κατσε firewalker με εριξες στα βαθια!

ο κωδικας που χρησιμοποιω ειναι αυτος:

>
#include <stdio.h>

main()
{
int c;

while ((c = getchar()) != '.')
   	switch(c){
       	case 'a':
           	printf("\n");
           	printf("Alpha");
           	break;
       	case 'b':
           	printf("\t");
           	printf("Bravo");
           	break;
       	case 'c':
           	printf("\t");
           	putchar('Charlie');
           	break;
       	case 'd':
           	printf("\t");
           	putchar('Delta');
           	break;
       	case 'e':
           	printf("\t");
           	putchar('Echo');
           	break;
       	case 'f':
           	printf("\t");
           	putchar('Foxtrot');
           	break;
       	case 'g':
           	printf("\t");
           	putchar('Golf');
           	break;
       	case 'h':
           	printf("\t");
           	putchar('Hotel');
           	break;
       	case 'i':
           	printf("\t");
           	putchar('India');
           	break;
       	case 'j':
           	printf("\t");
           	putchar('Juliet');
           	break;
       	case 'k':
           	printf("\t");
           	putchar('Kilo');
           	break;
       	case 'l':
           	printf("\t");
           	putchar('Lima');
           	break;
       	case 'm':
           	printf("\t");
           	putchar('Mike');
           	break;
       	case 'n':
           	printf("\t");
           	putchar('November');
           	break;
       	case 'o':
           	printf("\t");
           	putchar('Oscar');
           	break;
       	case 'p':
           	printf("\t");
           	putchar('Papa');
           	break;
       	case 'q':
           	printf("\t");
           	putchar('Quebek');
           	break;
       	case 'r':
           	printf("\t");
           	putchar('Romeo');
           	break;
       	case 's':
           	printf("\t");
           	putchar('Sierra');
           	break;
       	case 't':
           	printf("\t");
           	putchar('Tango');
           	break;
       	case 'u':
           	printf("\t");
           	putchar('Uniform');
           	break;
       	case 'v': 
           	printf("\t");
           	putchar('Victor');
           	break;
       	case 'w':
           	printf("\t");
           	putchar('Whiskey');
           	break;
       	case 'x':   
           	printf("\t");
           	putchar('Xray');
           	break;
       	case 'y':   
           	printf("\t");
           	putchar('Yankee');
           	break;
       	case 'z':
           	printf("\t");
           	putchar('Zulu');
           	break;
       	default:
           	printf("\t");
           	putchar(c);
           	break;
   	}

}

 

και θελω να προσθεσω ενα τμημα που οταν ο χρηστης διαβαζει εναν αριθμο,να εμφανιζει τοσα * οσος ειναι ο αριθμος.

Δημοσ.

Δες τις isdigit() και isalpha() στην ctype.h

οκ ευχαριστω πολυ!θα καθησω να τις μελετησω και αν βρω προβλημα θα ενημερωσω.ευχαριστω:)

Δημοσ.

οκ ευχαριστω πολυ!θα καθησω να τις μελετησω και αν βρω προβλημα θα ενημερωσω.ευχαριστω:)

 

Παρακαλώ ;)

 

Δες επίσης και τις atoi() / atol() / atof() και strtol() / strtod() στην stdlib.h

Δημοσ.

και θελω να προσθεσω ενα τμημα που οταν ο χρηστης διαβαζει εναν αριθμο,να εμφανιζει τοσα * οσος ειναι ο αριθμος.

 

Εφόσον κάνεις χρήση της getchar() δεν υπάρχει αριθμός. Υπάρχουν μόνο χαρακτήρες. Για να ελέγξεις λοιπόν εάν αυτός ο χαρακτήρας που έδωσε ο χρήστης αντιστοιχεί σε κάποιον αριθμό, θα μπλέξεις λιγάκι με τον ASCII code, όπως σου έγραψε ο firewalker.

 

:)

 

Στον ASCII code, οι αριθμητικοί χαρακτήρες είναι από το 0x30 έως και το 0x39, ή σε «κανονικά» νούμερα, από τη θέση 48 έως και τη θέση 57 (η 48η θέση είναι το 0 και η 57η το 9).

 

Δεδομένου ότι στη μνήμη και οι χαρακτήρες αποθηκεύονται ως αριθμοί, μπορείς με έναν απλό έλεγχο να βρεις εάν κάποιος χαρακτήρας είναι αριθμός ή όχι. Έστω ότι η getchar() σου δίνει αποτέλεσμα σε μία μεταβλητή char input. Εσύ το μόνο που έχεις να κάνεις, είναι να δεις εάν αυτή η μεταβλητή είναι μικρότερη από 58 και μεγαλύτερη από 47- σα να ήταν απλό νούμερο! Δηλαδή...

 

>if ( input > 47 && input < 58)
// είναι αριθμός

 

Εάν ισχύσει αυτή η συνθήκη, ο χαρακτήρας είναι αριθμός.

 

Τώρα θέλεις να πάρεις και την τιμή του, σωστά; Ε... μιας και είναι συμβατοί οι τύποι, το μόνο που χρειάζεται να κάνεις είναι...

 

>int num = input - 48;

 

And that's it. Τώρα έχεις μια int μεταβλητή, η οποία περιέχει την αριθμητική τιμή του χαρακτήρα που εισήγαγε ο χρήστης. Εάν λ.χ. εισήγαγε το '2', θα έχεις 50 (η τιμή του 2 στον ASCII code) - 48 = ...2!

 

Μετά αρκεί μία for-loop για να τυπώσεις όσα * θέλεις.

Δημοσ.

κατσε firewalker με εριξες στα βαθια!

ο κωδικας που χρησιμοποιω ειναι αυτος:

>
#include <stdio.h>

main()
{
int c;

while ((c = getchar()) != '.')
   	switch(c){
       	case 'a':
           	printf("\n");
           	printf("Alpha");
           	break;
       	case 'b':
           	printf("\t");
           	printf("Bravo");
           	break;
       	case 'c':
           	printf("\t");
           	putchar('Charlie');
           	break;
       	case 'd':
           	printf("\t");
           	putchar('Delta');
           	break;
       	case 'e':
           	printf("\t");
           	putchar('Echo');
           	break;
       	case 'f':
           	printf("\t");
           	putchar('Foxtrot');
           	break;
       	case 'g':
           	printf("\t");
           	putchar('Golf');
           	break;
       	case 'h':
           	printf("\t");
           	putchar('Hotel');
           	break;
       	case 'i':
           	printf("\t");
           	putchar('India');
           	break;
       	case 'j':
           	printf("\t");
           	putchar('Juliet');
           	break;
       	case 'k':
           	printf("\t");
           	putchar('Kilo');
           	break;
       	case 'l':
           	printf("\t");
           	putchar('Lima');
           	break;
       	case 'm':
           	printf("\t");
           	putchar('Mike');
           	break;
       	case 'n':
           	printf("\t");
           	putchar('November');
           	break;
       	case 'o':
           	printf("\t");
           	putchar('Oscar');
           	break;
       	case 'p':
           	printf("\t");
           	putchar('Papa');
           	break;
       	case 'q':
           	printf("\t");
           	putchar('Quebek');
           	break;
       	case 'r':
           	printf("\t");
           	putchar('Romeo');
           	break;
       	case 's':
           	printf("\t");
           	putchar('Sierra');
           	break;
       	case 't':
           	printf("\t");
           	putchar('Tango');
           	break;
       	case 'u':
           	printf("\t");
           	putchar('Uniform');
           	break;
       	case 'v': 
           	printf("\t");
           	putchar('Victor');
           	break;
       	case 'w':
           	printf("\t");
           	putchar('Whiskey');
           	break;
       	case 'x':   
           	printf("\t");
           	putchar('Xray');
           	break;
       	case 'y':   
           	printf("\t");
           	putchar('Yankee');
           	break;
       	case 'z':
           	printf("\t");
           	putchar('Zulu');
           	break;
       	default:
           	printf("\t");
           	putchar(c);
           	break;
   	}

}

 

και θελω να προσθεσω ενα τμημα που οταν ο χρηστης διαβαζει εναν αριθμο,να εμφανιζει τοσα * οσος ειναι ο αριθμος.

 

Ω ρε μανα μου ενα switch.. Αυτο δενθα το εγραφα ουτε με script

 

 

 

Δημοσ.

Ω ρε μανα μου ενα switch.. Αυτο δενθα το εγραφα ουτε με script

 

 

Ακριβώς!!!

 

 

Θα μπορούσε να γίνει ως εξής με χρήση πινάκα και μίας συνάρτησης...

 

οι πίνακες:

 

>
#define STRINGS_TO_PRINT 2

char **pAnsStrs;

pAnsStrs = (char**) malloc ( sizeof(char*) * STRINGS_TO_PRINT );

pAnsStrs[0] = (char*) malloc(sizeof(char) * 5);

pAnsStrs[0] = "Ans1\0";

pAnsStrs[1] = (char*) malloc ( sizeof(char) * 5 );

pAnsStrs[1] = "Ans2\0";

 

η συνάρτηση:

 

>
void strPrint(char* inputStr)
{
 printf("%s\n", inputStr);
}

 

Οπότε... μπορείς να κάνεις:

 

>
strPrint(pAnsStrs[theValueChar-48]);

Δημοσ.

Και εγώ σε πίνακες θα κατέληγα (αλλά με συμβατική μέθοδο :D).

 

 

 

>
/* NATO phonetic alphabet utility */

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

typedef struct
{
char Letter;
char *Word;
}_LetWord;

int main(void)
{
_LetWord LW[] = { {'a', "Alpha"}, {'b', "Bravo"}   , {'c', "Charlie"},
		  {'d', "Delta"}, {'e', "Echo" }   , {'f', "Foxtrot"},
		  {'g', "Golf" }, {'h', "Hotel"}   , {'i', "India"  },
		  {'j', "Juliet"},{'k', "Kilo" }   , {'l', "Lima"   },
		  {'m', "Mike" }, {'n', "November"},{'o',"Oscar" },
		  {'p', "Papa" }, {'q', "Quebek"}  ,{'r', "Romeo"  },
		  {'s', "Sierra"},{'t', "Tango"}   ,{'u', "Uniform"},
		  {'v', "Victor"},{'w', "Whiskey"} ,{'x',"Xray"   },
		  {'y', "Yankee"},{'z', "Zulu"}
	};

/* LW length */
const int LWSize = sizeof(LW) / sizeof(_LetWord);

int LWIdx,
	Chr;

unsigned char KnownChr;

/* On '.' quit */
while((Chr = getchar()) != '.')
{
       /* Process 0 to 9 digits (chrs) */
	if(isdigit(Chr))
	{
		int Number = Chr - '0';

		while(Number--)
			putchar('*');

		putchar('\n');
	}
	else
	{
		/* Process a to z letters (chrs) */
		for(LWIdx = 0; LWIdx < LWSize; LWIdx++)
			if((KnownChr = LW[LWIdx].Letter == Chr))
				printf("\t%s\n", LW[LWIdx].Word);

		if(!KnownChr)
			printf("\t%c\n", Chr);
	}
}

return 0;
}

ΕΙΣΟΔΟΣ:

>
abc9

ΕΞΟΔΟΣ:

>
       Alpha
       a
       Bravo
       b
       Charlie
       c
*********

Το πρόγραμμα έχει δοκιμασθεί σε C++ Builder και μπορεί να περιέχει bugs ή άλλες αβλεψίες

 

Δημοσ.

κατσε firewalker με εριξες στα βαθια!

ο κωδικας που χρησιμοποιω ειναι αυτος:

>
#include <stdio.h>

main()
{
int c;

while ((c = getchar()) != '.')
   	switch(c){
       	case 'a':
           	printf("\n");
           	printf("Alpha");
           	break;
       	case 'b':
           	printf("\t");
           	printf("Bravo");
           	break;
  	}

}

 

και θελω να προσθεσω ενα τμημα που οταν ο χρηστης διαβαζει εναν αριθμο,να εμφανιζει τοσα * οσος ειναι ο αριθμος.

 

Edit: Με πρόλαβαν οι Timon, DirectX.

 

 

Αν ο ASCII αριθμός του χαρακτήρα που εισάγει ο χρήστης είναι μεγαλύτερος ή ίσος με το 48 και μικρότερος ή ίσος του 57 τότε είναι αριθμός.

Στον ASCII code, οι αριθμητικοί χαρακτήρες είναι από το 0x30 έως και το 0x39, ή σε «κανονικά» νούμερα, από τη θέση 48 έως και τη θέση 57 (η 48η θέση είναι το 0 και η 57η το 9).

 

Δεδομένου ότι στη μνήμη και οι χαρακτήρες αποθηκεύονται ως αριθμοί, μπορείς με έναν απλό έλεγχο να βρεις εάν κάποιος χαρακτήρας είναι αριθμός ή όχι. Έστω ότι η getchar() σου δίνει αποτέλεσμα σε μία μεταβλητή char input. Εσύ το μόνο που έχεις να κάνεις, είναι να δεις εάν αυτή η μεταβλητή είναι μικρότερη από 58 και μεγαλύτερη από 47- σα να ήταν απλό νούμερο! Δηλαδή...

 

>if ( input > 47 && input < 58)
// είναι αριθμός

 

Εάν ισχύσει αυτή η συνθήκη, ο χαρακτήρας είναι αριθμός.

 

Τώρα θέλεις να πάρεις και την τιμή του, σωστά; Ε... μιας και είναι συμβατοί οι τύποι, το μόνο που χρειάζεται να κάνεις είναι...

 

>int num = input - 48;

 

And that's it. Τώρα έχεις μια int μεταβλητή, η οποία περιέχει την αριθμητική τιμή του χαρακτήρα που εισήγαγε ο χρήστης. Εάν λ.χ. εισήγαγε το '2', θα έχεις 50 (η τιμή του 2 στον ASCII code) - 48 = ...2!

 

Μετά αρκεί μία for-loop για να τυπώσεις όσα * θέλεις.

 

Όχι βέβαια ότι ο OP θα χρησιμοποιήσει κάποιο σύστημα που δεν θα έχει ASCII αλλά δεν χάνει κάτι (ίσα ίσα κερδίζει ότι δεν χρειάζεται να θυμάται τα ascii codes) να χρησιμοποιεί input >= '0', input <= '9', input - '0' αντίστοιχα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...