Санкционировать тип информации, прочитав это в C

Я хотел бы узнать лучшую форму и работоспособнее, чтения типа информации, и если digitan любая другая вещь, которая не происходила бы оттуда, до тех пор, пока digite тип информации, которую я прошу у него.

Пример:

int numero;
printf("Digite un numero: ");
scanf("%d",&numero);

Если пользователь digita буква, которая не принимала бы ее; если пользователь digita знаки как:., ´{ [] }] # € ~ € € ~~ # | между другими, которые я это не принял; то же самое идет на тип информации char, которого я не смог контролировать очень хорошо, потому что этот принимает мне числа и знаки.

То, что я ищу, состоит в том, чтобы чтение данных было достаточно компактным и безопасным.

Эта осуществляя следующее решение, чтобы читать тип информации в специфическом средстве, но мне лишенная, что не принял знаки:. ´{ } {] [~ #@ € # € ´ç+++ ', и т.д.

      do //Utilizo un 'do-while' para validar el ingreso del tipo de dato.
    {       
        system("CLS");  
        printf("DIGITE EL NUMERO DE CONJUNTOS QUE DESEA CREAR (DEBE SER MAYOR A '0' - HASTA 20 ): ");
    }
    while(!scanf("%d",&vectores)==1 || vectores==0 || vectores>20);

В то время как scanf под меня не возвратит 0, он останется там; я не знаю, лучшая форма ли это, но оно я функционирует очень хорошо, так как это самое короткое решение, которое я увидел, чтобы санкционировать тип информации.

0
задан 08.05.2018, 04:12
3 ответа

UtilicГ© она funciГіn isalpha и isdigit из книжного магазина <ctype.h>, чтобы санкционировать тип информации.

0
ответ дан 23.11.2019, 22:59

Ты должен захватывать характер и подтверждать, соответствует ли характер числу, а можешь создавать цепь символов и подтверждать dГ-gito в dГ-gito:

do{
    char numero;
    printf("Digite un numero: ");
    scanf("%c",&numero);
while(numero<'0'||numero>'9');
int numero2=atoi(numero);

В примере цепей символов ты должен делать цикл с цепью, чтобы подтверждать dГ-gito в dГ-gito.

2
ответ дан 23.11.2019, 22:59
  • 1
    Извинение, ты используешь переменную я нумерую снаружи Вашего scope, этот код не функционировал бы, хотя логика правильна – Sacha 09.05.2018, 21:10

Вот, чтобы санкционировать различные типы данных обычно различные утверждения, так что я acotarГ© во вторую condiciГіn, что есть в твоем вопросе

, ДОЛЖНО БЫТЬ ПРЕВОСХОДЯЩИМ '0' - ДО 20

, Что в самом деле достаточно простое:

//buffer de lectura
char buffer[3];
//numero leido
int  n;
//Limpiamos el buffer
memset(buffer,0,3);
//Leemos exactamente dos caracteres del standar input
fread(buffer, 2, 1, stdin);
//Los convertimos a entero
n = atoi(buffer);
//Comprobamos el numero
if(n > 0 && n < 21){
    printf("OK");
}else{
    printf("NO");
}
1
ответ дан 23.11.2019, 22:59