Проверка корректности введенных данных - 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);

Объяснение кода листинга программы

  1. Установка начального значения переменной n равным N.
  2. Проверка корректности введенных данных:
    • Если введено значение меньше N, то повторение цикла.
    • Если введено пустое значение или нечисловое значение, то повторение цикла.
    • Если введено значение меньше или равное нулю, то повторение цикла.
  3. Вывод сообщения с просьбой ввести порядок матрицы.
  4. Очистка буфера ввода с помощью функции fflush(stdin).
  5. Ввод значения переменной n с помощью функции scanf(%d,&n).
  6. Цикл повторяется до тех пор, пока не будет введено корректное значение переменной n.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5
Похожие ответы