Проверка корректности введенных данных - C (СИ)
Формулировка задачи:
Здравствуйте, возникла такая проблема - в программе, на языке Си, необходимо реализовать проверку корректности введенных пользователем данных, то бишь чтобы например если пользователь вводит с клавиатуры вместо цифры букву, то выскакивала ошибка. Попробовал реализовать её через try/catch, но если ввести букву, то программа все равно продолжает работать и в итоге просто выдает ошибочные значения. Подскажите пожалуйста что необходимо добавить/исправить чтобы все заработало так как надо, или может быть какой-нибудь другой метод реализации такой проверки. Используемый компилятор Visual Studio 2010.Вот сам код программы:
#include "stdafx.h"
#include "conio.h"
#include <math.h>
#include <stdlib.h>
#define N 5
void matrix_n_vector (float m[][N], float v[],float res[],int n)
{
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
res[i] = 0;
for(int k = 0; k < n; k++)
res[i] += (m[i][k] * v[k]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int n,i,j;
float v, a[N][N];
printf ("Vvedite poryadok matrici: ");
scanf("%d",&n);
if ( N < n )
{
printf( "Slishkom bolshoi poryadok matrici\n" );
getch();
return 0;
}
printf("\nVvedite sistemu\n");
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
try { //проверка корректности введенных данных
scanf("%f",&v);
a[i][j] = v;
}
catch(...) {
printf("Error");
}
}
system("cls");
printf("matrix:\n");
for(i=0; i<n; i++)
{
printf("\n");
for (j=0; j<n; j++)
printf("%2.2f ",a[i][j]);
}
int iter=0;
float L=0, Lprov, Xn1[N],Xn[N];
for (int i=0; i<n; i++) Xn[i]=1;
do
{
iter++;
Lprov=L;
matrix_n_vector(a, Xn, Xn1,n);
L=Xn1[0]/Xn[0];
for (int i=0; i<n; i++) Xn[i]=Xn1[i];
}
while ((fabs(L-Lprov))>=0.1);
printf("\n\nvektor:\n");
for(i=0; i<n; i++)
{
printf("%2.2f ",Xn1[i]);
}
printf ("\n\nL = ");
printf ("%f", L);
printf ("\n\niteracii = ");
printf ("%d", iter);
getch();
return 0;
}Решение задачи: «Проверка корректности введенных данных»
textual
Листинг программы
do
{
printf ("Vvedite poryadok matrici: ");
fflush(stdin)
scanf("%d",&n);
} while(N < n || !n || n<=0);
Объяснение кода листинга программы
- Установка начального значения переменной
nравным N. - Проверка корректности введенных данных:
- Если введено значение меньше N, то повторение цикла.
- Если введено пустое значение или нечисловое значение, то повторение цикла.
- Если введено значение меньше или равное нулю, то повторение цикла.
- Вывод сообщения с просьбой ввести порядок матрицы.
- Очистка буфера ввода с помощью функции fflush(stdin).
- Ввод значения переменной
nс помощью функции scanf(%d,&n). - Цикл повторяется до тех пор, пока не будет введено корректное значение переменной
n.