При выводе строки на экран появляется не нужный перенос строки - C (СИ)
Формулировка задачи:
Дорогие знатоки, проблема следующая: при выводе строки на экран появляется символ переноса строки появление которого моему уму не постижимо (в программировании слабоват). Надеюсь на вашу помощь) Собственно проблема на скрине.
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <windows.h>
- #include <iostream>
- #include <string.h>
- #define N 3
- char predmet1[20];
- char predmet2[20];
- char predmet3[20];
- char shif_stud[] = "Шифр студента";
- char shif_grup[] = "Шифр группы";
- char FIO[] = "Ф.И.О. студента";
- char sred[] = "Средний балл";
- float alg_1(float a, float b, float c) //Вычесление среднего балла студента
- {
- float res = (a + b + c)/3;
- return res;
- }
- struct student
- {
- int shif_stud; //Шифр студента
- char FIO[20];
- int shif_grup; //Шифр Группы
- float ocenka1;
- float ocenka2;
- float ocenka3;
- float sred; //Средний балл студента
- } stud[N];
- int main(void)
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- setlocale(LC_ALL, "rus");
- int i, vibor1, vibor2;
- printf("Пожалуйста, введите дисциплины обучения студентов (предметы):\n");
- printf("Введите название 1 - ого предмета (до 20-ти знаков):");
- gets (predmet1);
- printf("Введите название 2 - ого предмета (до 20-ти знаков):");
- gets (predmet2);
- printf("Введите название 3 - ого предмета (до 20-ти знаков):");
- gets (predmet3);
- printf("Как вы хотите получить информацию о студентах?\n");
- printf("1. - Из файла\n");
- printf("2. - Вручную\n");
- scanf("%d", &vibor1);
- FILE *fp;
- switch (vibor1)
- {
- case 1:
- fp = fopen("K16-1.txt", "r");
- if((fp = fopen("K16-1.txt", "r")) == NULL)
- {
- printf("ОШИБКА! Файла не существует!\n");
- printf("Пожалуйста, введите информацию:\n");
- }
- else
- {
- for(i = 0; i < N; i++)
- {
- fgets(stud[i].FIO, 19, fp);
- fscanf(fp, "%d\n", &stud[i].shif_stud);
- fscanf(fp, "%d\n", &stud[i].shif_grup);
- fscanf(fp, "%f\n", &stud[i].ocenka1);
- fscanf(fp, "%f\n", &stud[i].ocenka2);
- fscanf(fp, "%f\n", &stud[i].ocenka3);
- fscanf(fp, "%f\n", &stud[i].sred);
- }
- fclose(fp);
- break;
- }
- case 2:
- fp = fopen("K16-1.txt", "w");
- for (i = 1; i < N; i++)
- {
- printf("Введите Ф.И.О. %d-го студента (до 20-ти знаков):\n", i);
- fflush(stdin);
- fgets(stud[i].FIO, 20, stdin);
- fputs(stud[i].FIO, fp);
- printf("Введите шифр %d-го студента (6 знаков):\n", i);
- scanf("%d", &stud[i].shif_stud);
- fprintf(fp, "%d\n", stud[i].shif_stud);
- printf("Введите шифр группы %d-го студента (6 знаков):", i);
- scanf("%d", &stud[i].shif_grup);
- fprintf(fp, "%d\n", stud[i].shif_grup);
- printf("Введите оценку студента по дисциплине %s (1 знак):", predmet1);
- scanf("%f", &stud[i].ocenka1);
- fprintf(fp, "%f\n", stud[i].ocenka1);
- printf("Введите оценку студента по дисциплине %s (1 знак):", predmet2);
- scanf("%f", &stud[i].ocenka2);
- fprintf(fp, "%f\n", stud[i].ocenka2);
- printf("Введите оценку студента по дисциплине %s (1 знак):", predmet3);
- scanf("%f", &stud[i].ocenka3);
- fprintf(fp, "%f\n", stud[i].ocenka3);
- stud[i].sred = alg_1(stud[i].ocenka1, stud[i].ocenka2, stud[i].ocenka3);
- fprintf(fp, "%f\n", stud[i].sred);
- }
- fclose(fp);
- break;
- }
- system("cls");
- while (vibor2 != 4)
- {
- printf("_____________________________________________________________________________________________\n");
- printf(" |-----------Меню----------| \n");
- printf(" \n");
- printf(" | Выберите пожалуйста действие | \n");
- printf(" \n");
- printf(" 1. - Вывести список студентов, получающих степендию \n");
- printf(" 2. - Список студентов, умеющих неудовлетворительные оценки \n");
- printf(" 3. - Вывод оценок студента по всем дисциплинам \n");
- printf(" 4. - Выход \n");
- printf("_____________________________________________________________________________________________\n");
- scanf("%d", &vibor2);
- system("cls");
- switch (vibor2)
- {
- case 1:
- printf("%-20s%-20s%-20s%-20s\n", shif_stud, shif_grup, FIO, sred);
- for (i = 0; i < N; i++)
- {
- if (stud[i].sred >= 4)
- {
- printf("%-20d%-20d%-20s%-20f\n", stud[i].shif_stud, stud[i].shif_grup, stud[i].FIO, stud[i].sred);
- }
- }
- getch();
- system("cls");
- break;
- case 2:
- printf("%-20s%-20s%-20s%-20s\n", shif_stud, shif_grup, FIO, sred);
- for (i = 0; i < N; i++)
- {
- if (stud[i].sred < 3)
- {
- printf("%-21d%-20d%-20s%-20f\n", stud[i].shif_stud, stud[i].shif_grup, stud[i].FIO, stud[i].sred);
- }
- }
- getch();
- system("cls");
- break;
- case 3:
- printf("%-20s%-20s%-20s%-20s%-20s%-20s\n", FIO, shif_grup, shif_stud, predmet1, predmet2, predmet3);
- for (i = 0; i < N; i++)
- {
- printf("%-20s", stud[i].FIO);
- printf("%-20d%-20d%-20f%-20f%-20f\n", stud[i].shif_grup, stud[i].shif_stud, stud[i].ocenka1, stud[i].ocenka2, stud[i].ocenka3);
- }
- getch();
- system("cls");
- break;
- case 4:
- printf("До свидания!");
- getch();
- break;
- default:
- printf("Неверное действие! Повторите ввод.");
- getch();
- system("cls");
- break;
- }
- }
- }
Решение задачи: «При выводе строки на экран появляется не нужный перенос строки»
textual
Листинг программы
- попробуйте так:
- fgets(stud[i].FIO, 20, stdin);
- for(int j = 0; stud[i].FIO[j]; j++)
- if(stud[i].FIO[j] == '\n')
- stud[i].FIO[j] = '\0';
Объяснение кода листинга программы
В данном коде предполагается, что мы работаем с массивом структур, где каждая структура содержит информацию о студенте. Каждый элемент массива представляет собой отдельного студента.
fgets(stud[i].FIO, 20, stdin);
- Этот код считывает имя и фамилию студента (в формате FIO) с помощью функцииfgets
. Переменнаяi
используется для обращения к конкретному элементу массива структур.for(int j = 0; stud[i].FIO[j]; j++)
- Это цикл, который проходит по всем символам в строкеstud[i].FIO
. Он продолжается, пока не встретит символ '\0' (конец строки).if(stud[i].FIO[j] == '\n')
- Этот код проверяет, является ли текущий символ символом новой строки ('\n').stud[i].FIO[j] = '\0';
- Если текущий символ является символом новой строки, он заменяется на символ конца строки ('\0'). Это делается для того, чтобы удалить символ новой строки из строкиstud[i].FIO
. Однако, этот код может не работать должным образом, если ввод студенческих имен содержит символы новой строки. В таком случае, этот код может некорректно обрабатывать эти имена.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д