Проверка корректности введенных данных - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, возникла такая проблема - в программе, на языке Си, необходимо реализовать проверку корректности введенных пользователем данных, то бишь чтобы например если пользователь вводит с клавиатуры вместо цифры букву, то выскакивала ошибка. Попробовал реализовать её через try/catch, но если ввести букву, то программа все равно продолжает работать и в итоге просто выдает ошибочные значения. Подскажите пожалуйста что необходимо добавить/исправить чтобы все заработало так как надо, или может быть какой-нибудь другой метод реализации такой проверки. Используемый компилятор Visual Studio 2010.Вот сам код программы:
Листинг программы
  1. #include "stdafx.h"
  2. #include "conio.h"
  3. #include <math.h>
  4. #include <stdlib.h>
  5. #define N 5
  6. void matrix_n_vector (float m[][N], float v[],float res[],int n)
  7. {
  8. for(int i = 0; i < n; i++)
  9. for(int j = 0; j < n; j++)
  10. {
  11. res[i] = 0;
  12. for(int k = 0; k < n; k++)
  13. res[i] += (m[i][k] * v[k]);
  14. }
  15. }
  16. int _tmain(int argc, _TCHAR* argv[])
  17. {
  18. int n,i,j;
  19. float v, a[N][N];
  20. printf ("Vvedite poryadok matrici: ");
  21. scanf("%d",&n);
  22. if ( N < n )
  23. {
  24. printf( "Slishkom bolshoi poryadok matrici\n" );
  25. getch();
  26. return 0;
  27. }
  28. printf("\nVvedite sistemu\n");
  29. for (i=0; i<n; i++)
  30. for (j=0; j<n; j++)
  31. {
  32. try { //проверка корректности введенных данных
  33. scanf("%f",&v);
  34. a[i][j] = v;
  35. }
  36. catch(...) {
  37. printf("Error");
  38. }
  39. }
  40. system("cls");
  41. printf("matrix:\n");
  42. for(i=0; i<n; i++)
  43. {
  44. printf("\n");
  45. for (j=0; j<n; j++)
  46. printf("%2.2f ",a[i][j]);
  47. }
  48. int iter=0;
  49. float L=0, Lprov, Xn1[N],Xn[N];
  50. for (int i=0; i<n; i++) Xn[i]=1;
  51. do
  52. {
  53. iter++;
  54. Lprov=L;
  55. matrix_n_vector(a, Xn, Xn1,n);
  56. L=Xn1[0]/Xn[0];
  57. for (int i=0; i<n; i++) Xn[i]=Xn1[i];
  58. }
  59. while ((fabs(L-Lprov))>=0.1);
  60. printf("\n\nvektor:\n");
  61. for(i=0; i<n; i++)
  62. {
  63. printf("%2.2f ",Xn1[i]);
  64. }
  65. printf ("\n\nL = ");
  66. printf ("%f", L);
  67. printf ("\n\niteracii = ");
  68. printf ("%d", iter);
  69. getch();
  70. return 0;
  71. }

Решение задачи: «Проверка корректности введенных данных»

textual
Листинг программы
  1. do
  2. {
  3. printf ("Vvedite poryadok matrici: ");
  4. fflush(stdin)
  5. scanf("%d",&n);
  6. } 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы