Проверка корректности введенных данных - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д