Консультация № 198424
30.04.2020, 12:38
0.00 руб.
0 2 2
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Тоже на языке С составить программу: Дан текст. Определить, является ли он правильной десятичной записью целого числа.

Обсуждение

давно
Советник
400484
472
30.04.2020, 14:24
общий
это ответ
Здравствуйте, CTRL+ALT+DEL!
Вот возможный вариант:
Код:

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

void CheckStringAsInt(char *text)
{
printf("Check string %s\n", text);

for (int i = 0; text[i] != '\0'; i++)
{
if (i == 0 && (text[i] == '-' || text[i] == '+'))
continue;

if ((int)text[i] < 48 || (int)text[i] > 57) // проверяем, что это число от 0 до 9
{
printf("String is not integer\n\n");
return;
}
}

printf("String is integer\n\n");
}

int main()
{
char *text = "-100";
CheckStringAsInt(text);

text = "+100";
CheckStringAsInt(text);

text = "1234567890";
CheckStringAsInt(text);

text = "12345678901234567890";
CheckStringAsInt(text);

text = "123456d";
CheckStringAsInt(text);

text = "test";
CheckStringAsInt(text);

scanf("%s", &text);

return 0;
}
5
Спасибо!
давно
Студент
403303
19
30.04.2020, 15:45
общий
это ответ
Здравствуйте, CTRL+ALT+DEL!

Не очень лаконично, но с моей точки зрения наглядно:

Код:
#include <stdio.h>

int main()
{
char str[101];
int i=0;
printf("Введите десятичное целое число: ");
scanf("%100s",str);

/* цикл по символам введенной строки */
while(str[i])
{
switch(str[i])
{
case '-':
/* знак минус допустим только первым и не единственным символом */
if( ! (i==0 && str[1]) )
{
printf("Error");
return 1;
}
break;
case '0':
/* Знак 0 допустим только единственным символом, либо после другой цифры */
if( i==0)
{
if(str[1])
{
printf("Ошибка ввода.");
return 1;
}
}
else
{
if(str[i-1]=='-')
{
printf("Ошибка ввода.");
return 1;
}
}
break;
default:
/* В остальных случаях допустима только цифра */
if(str[i]<'0' || str[i]>'9')
{
printf("Ошибка ввода.");
return 1;
}
break;
}
i++;
}
printf("Верная запись целого числа.");
return 0;
}
Форма ответа