Как организовать защиту интовской переменной от ввода букв и т.д.? - C (СИ)
Формулировка задачи:
//ГЉГ*æäûå n ñèìâîëîâ ГўГ® ââåäåГ*Г*îì ГІГҐГЄГ±ГІГҐ îòäåëèòü Г§Г*Г*êîì "!".
#include <stdio.h>
#include <conio.h>
#include <string.h>
char buf[1]; // ГЎГіГґГҐГ°
int main(int argc, char *argv[])
{
char str[255], str1[255];
int i,j,len,n,k=1;
size_t sz;
buf[0] = '\0';
str1[0]= '\0';
j=0;
// èçáûòî÷Г*Г*Гї ГЁГ*ГЁГ¶ГЁГ*ëèçГ*Г¶ГЁГї
printf("Stroka=");
gets(str);
printf("n=");
scanf("%d",&n);
sz = strncpy(buf, str, 1);
// ïðèìåð îïðåäåëåГ*ГЁГї ГіГ±ГҐГ·ГҐГ*ГЁГї ñòðîêè
len=strlen(str);
printf("n=%d",n);
while ((n>len) || (n<=0))
{
printf("VVESTI KORREKNOE n\n");
printf("n=");
scanf("%d",&n);
}
for(i=0;i<len;i++)
{
sz = strncpy(buf, str+i, 1);
if (i==n*k)
{
strcat(str1, "!");
k++;
}
strcat(str1, buf);
}
printf("\nStroka=%s",str1);
getch();
}Решение задачи: «Как организовать защиту интовской переменной от ввода букв и т.д.?»
textual
Листинг программы
do
{
printf("Введите № (от %d до %d): ", 1, A*B);
fflush(stdin); //очистка буффера памяти с ввода
}
while(
scanf ("%d", &a) !=1 && printf("Надо вводить число!\n")
|| p <= 0 && printf("Надо вводить положительное число!\n")
|| p > A*B && printf("Надо вводить число от %d до %d!\n", 1, A*B)
);
Объяснение кода листинга программы
- Объявлены переменные: A, B, a, p.
- Введен цикл do-while.
- В первой ветке цикла происходит вывод сообщения с просьбой ввести номер (от 1 до A*B) и очистка буфера ввода с помощью fflush(stdin).
- Вторая ветка цикла проверяет, что было введено число (сканирование с помощью scanf), и если это не так, выводит сообщение
Надо вводить число!. - Третья ветка цикла проверяет, что введенное число больше или равно 0, и если это не так, выводит сообщение
Надо вводить положительное число!. - Четвертая ветка цикла проверяет, что введенное число меньше или равно AB, и если это не так, выводит сообщение
Надо вводить число от 1 до %d!, 1, AB. - Цикл выполняется до тех пор, пока не будет введено число, удовлетворяющее всем условиям.