Anna vor 2 Wochen
Ursprung
Commit
39b01d49b1
2 geänderte Dateien mit 78 neuen und 37 gelöschten Zeilen
  1. 76 37
      Project8/FileName.c
  2. 2 0
      Project8/otvet.txt

+ 76 - 37
Project8/FileName.c

@@ -15,49 +15,88 @@
 #include <stdio.h>
 #include <conio.h>
 #include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
 
-void main() {
-    //С помощью переменной file будем осуществлять доступ к файлу
+int is_valid_double(const char* str) {
+    char* endptr;
+    // Проверяем, можно ли преобразовать строку в число типа double
+    strtod(str, &endptr);
+
+    // Если endptr указывает на начало строки или не на конец строки, значит, это не число
+    return *endptr == '\0' && endptr != str;
+}
+
+int main() {
+    system("chcp 1251>nul");
+    // С помощью переменной file будем осуществлять доступ к файлу
     FILE* file;
-    //Открываем текстовый файл с правами на запись
+    // Открываем текстовый файл с правами на чтение
     file = fopen("test.txt", "r");
-    //Пишем в файл
+
     double a, b, c;
 
-	if (file == NULL) {
-		fprintf(stderr, "Ошибка открытия файла для чтения коэффициентов.\n");
-		return 1;
-	}
-	fscanf(file, "%lf %lf %lf", &a, &b, &c);
+    if (file == NULL) {
+        fprintf(stderr, "Ошибка открытия файла для чтения коэффициентов.\n");
+        return 1;
+    }
+
+    char line[256];
+    int count = 0;
+
+    // Считываем значения из файла по строкам
+    while (fgets(line, sizeof(line), file) != NULL) {
+        char* token = strtok(line, " \n");
+        while (token != NULL) {
+            if (is_valid_double(token)) {
+                if (count == 0) {
+                    a = strtod(token, NULL);
+                }
+                else if (count == 1) {
+                    b = strtod(token, NULL);
+                }
+                else if (count == 2) {
+                    c = strtod(token, NULL);
+                }
+                count++;
+            }
+            else {
+                fprintf(stderr, "Ошибка: '%s' не является допустимым числом.\n", token);
+                fclose(file);
+                return 1;
+            }
+            token = strtok(NULL, " \n");
+        }
+    }
 
-    
-    //Закрываем файл
+    // Закрываем файл
     fclose(file);
-    printf("%lf", a);
-    _getch();
-	double D = b * b - 4 * a * c;
-	/*char otvet[200] = "корни уравнения: ";*/
-	FILE* file1 = fopen("otvet.txt", "w");
-	if (file1 == NULL) {
-		fprintf(stderr, "Ошибка открытия файла для записи результатов.\n");
-		return;
-	}
-	if (D > 0) {
-		double x1 = (-b + sqrt(D)) / (2 * a);
-		double x2 = (-b - sqrt(D)) / (2 * a);
-		char buffer[200];
-
-		fprintf(file1, "%.2f и %.2f", x1, x2);
-		fprintf(file1, "\n Дискриминант %.2f", D);
-	}
-	else if (D == 0) {
-		double x = -b / (2 * a);
-		fprintf(file1, "Корень уравнения: %.2f", x);
-		fprintf(file1, "\n Дискриминант %.2f", D);
-	}
-	else if (D < 0)fprintf(file1, "Нет действительных корней");
-	fclose(file1);
-	_getch(); 
-	return 0;
+    printf("Коэффициенты: a = %lf, b = %lf, c = %lf\n", a, b, c);
+
+    double D = b * b - 4 * a * c;
+
+    // Открываем файл для записи результатов
+    FILE* file1 = fopen("otvet.txt", "w");
+    if (file1 == NULL) {
+        fprintf(stderr, "Ошибка открытия файла для записи результатов.\n");
+        return 1;
+    }
 
+    if (D > 0) {
+        double x1 = (-b + sqrt(D)) / (2 * a);
+        double x2 = (-b - sqrt(D)) / (2 * a);
+        fprintf(file1, "Корни уравнения: %.2f и %.2f\n", x1, x2);
+    }
+    else if (D == 0) {
+        double x = -b / (2 * a);
+        fprintf(file1, "Корень уравнения: %.2f\n", x);
+    }
+    else {
+        fprintf(file1, "Нет действительных корней\n");
+    }
+
+    fprintf(file1, "Дискриминант: %.2f\n", D);
+    fclose(file1);
+    _getch();
+    return 0;
 }

+ 2 - 0
Project8/otvet.txt

@@ -0,0 +1,2 @@
+Корни уравнения: -0.43 и -0.43
+Дискриминант: 22.01