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