Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/140: Рейтинг темы: голосов - 140, средняя оценка - 4.79
0 / 0 / 1
Регистрация: 20.07.2016
Сообщений: 108
1

Проверка на ввод только чисел

06.12.2016, 21:43. Показов 27047. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!

У меня есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdio.h"
 
 
int main() {
 
    int q;
    double j;
    printf("Enter the number of the data presented: ");
    scanf("%d", &q);
    double* arr = new double[q];
    for (int i = 0; i < q; i++) {
        if(scanf("%lf", &j)!=1){
            printf("\nError!\nTry again!\n"); break; }
            else
            {
        arr[i] = j;
        if (j == (int)j)
            printf("True\n");
        else
            printf("False\n");
            }
    }
    return 0;
}

Программа проверяет, является ли число целым. Если да - True, если нет - False.

В качестве проверки я использовал это:
C++
1
if(scanf("%lf", &j)!=1)
но мне кажется это не очень правильным, хоть и работает в принципе как нужно.


Задание звучит так:

"... является ли введенная с клавиатуры строка целым числом."

Но не сложную проверку на С я не смог придумать.

Слышал, что есть проверка по ACII, и в принципе достаточно хороший вариант, но я не знаю как его можно реализовать. Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2016, 21:43
Ответы с готовыми решениями:

Проверка на ввод только чисел
Написал программу которая принимает два числа а потом оперирует. Но если я ввожу букву то выдаёт...

Проверка на ввод только чисел
Народ как сделать проверку что бы вводились только числа? Добавлено через 6 минут Можно ли...

Проверка на ввод только целых и вещественных чисел
как сделать проверку на ввод только целых и вещественных чисел? и чтоб прога бы не вылетала, а...

Проверка на ввод только числа
Необходимо ввести с клавиатуры число double. Есть проверка на ввод double enterImaginary; for...

4
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
07.12.2016, 00:22 2
Менее красиво, но как вариант, сразу пришло в голову.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
#include <stdlib.h>
 
 
int main(void)
{
    
    char string_number[BUFSIZ], *string_pointer = string_number;
    
    char flag =0;
    
    do
        {
            printf("Input a number : ");
            scanf("%s",string_number);
            if ( !strcmp(string_number,"stop") )
                break;
                    while (*string_pointer)
                       {
                        if  (  (!isdigit(*string_pointer) ) && *string_pointer != '-' && *string_pointer != '+' )
                           {
                            printf("It is not an integer number!\n");
                            flag = 1;
                           }
                         string_pointer++;
                       }
         if  (!flag)
               printf("It is an integer number!\n");
            string_pointer = string_number;
            printf("To stop input type stop!\n");
        }
    while (5*5==25);
    
    return 0;
}


Добавлено через 2 минуты
И в ТЗ же сказано как раз - таки про строку. Нет там ни слова что вводят или integer или double.

Добавлено через 6 минут
И возможен вариант , когда числа вводятся в сс с основанием больше 10. Тогда нужно добавить еще одно условие, чтобы последовательность букв AAFAF воспринималась также как число.
0
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
07.12.2016, 02:57 3
Цитата Сообщение от Boogie Woogie Посмотреть сообщение
Слышал, что есть проверка по ACII, и в принципе достаточно хороший вариант, но я не знаю как его можно реализовать. Спасибо
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
 
bool is_integer(const char* str)
{
    while(*str)
        if(!isdigit(*str++))
            return false;
    return true;
}
 
int main(void)
{
    char buf[BUFSIZ];
    if(!fgets(buf, BUFSIZ, stdin))
        return 1;
    buf[strlen(buf)-1] = 0;
    printf("%s is %sinteger\n", buf, is_integer(buf) ? "" : "not ");
    return 0;
}
0
0 / 0 / 1
Регистрация: 20.07.2016
Сообщений: 108
09.12.2016, 21:32  [ТС] 4
Всем спасибо

Реализовал таким образом:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdio.h"
 
 
 
int main() 
{
    int i, j;
    char mass[100];
    printf("Enter string: ");
    fgets(mass, 100, stdin);
    for(i=0; i<100; i++) {
        if(((char)mass[i]>=48) && ((char)mass[i]<=57))
        j++;
 
        if((char)mass[i]=='\0') {
            i--; break;
        }
        else i++;
    }
    if(i==j) {
    printf("Its true\n");
    }
    else
        printf("its false\n");
    
   getchar();
}
0
0 / 0 / 0
Регистрация: 03.02.2022
Сообщений: 3
03.02.2022, 14:14 5
У тебя не получилось, так как целыми числами являются числа, больше 9 и меньше -9, а при вводе данных больше или меньше этих чисел на выводе false
0
03.02.2022, 14:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2022, 14:14
Помогаю со студенческими работами здесь

Проверка на ввод только одного символа
Код #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; int main() {...

Проверка на ввод только нескольких букв
Проверка на ввод только цифр или букв, понятна, а вот собственно нужно ввести только три буквы по...

Проверка на ввод только символов (строковый класс)
Здравствуйте, проблема заключается в том, что не знаю как сделать проверку на ввод только символов...

Ввод двух целых чисел и проверка этих чисел условиями
.486 ; create 32 bit code .model flat, stdcall ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru