При выводе строки на экран появляется не нужный перенос строки - 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';

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

В данном коде предполагается, что мы работаем с массивом структур, где каждая структура содержит информацию о студенте. Каждый элемент массива представляет собой отдельного студента.

  1. fgets(stud[i].FIO, 20, stdin); - Этот код считывает имя и фамилию студента (в формате FIO) с помощью функции fgets. Переменная i используется для обращения к конкретному элементу массива структур.
  2. for(int j = 0; stud[i].FIO[j]; j++) - Это цикл, который проходит по всем символам в строке stud[i].FIO. Он продолжается, пока не встретит символ '\0' (конец строки).
  3. if(stud[i].FIO[j] == '\n') - Этот код проверяет, является ли текущий символ символом новой строки ('\n').
  4. stud[i].FIO[j] = '\0'; - Если текущий символ является символом новой строки, он заменяется на символ конца строки ('\0'). Это делается для того, чтобы удалить символ новой строки из строки stud[i].FIO. Однако, этот код может не работать должным образом, если ввод студенческих имен содержит символы новой строки. В таком случае, этот код может некорректно обрабатывать эти имена.

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


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

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

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