При выводе строки на экран появляется не нужный перенос строки - C (СИ)

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

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

Дорогие знатоки, проблема следующая: при выводе строки на экран появляется символ переноса строки появление которого моему уму не постижимо (в программировании слабоват). Надеюсь на вашу помощь) Собственно проблема на скрине.
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <windows.h>
  4. #include <iostream>
  5. #include <string.h>
  6. #define N 3
  7. char predmet1[20];
  8. char predmet2[20];
  9. char predmet3[20];
  10. char shif_stud[] = "Шифр студента";
  11. char shif_grup[] = "Шифр группы";
  12. char FIO[] = "Ф.И.О. студента";
  13. char sred[] = "Средний балл";
  14. float alg_1(float a, float b, float c) //Вычесление среднего балла студента
  15. {
  16. float res = (a + b + c)/3;
  17. return res;
  18. }
  19. struct student
  20. {
  21. int shif_stud; //Шифр студента
  22. char FIO[20];
  23. int shif_grup; //Шифр Группы
  24. float ocenka1;
  25. float ocenka2;
  26. float ocenka3;
  27. float sred; //Средний балл студента
  28. } stud[N];
  29. int main(void)
  30. {
  31. SetConsoleCP(1251);
  32. SetConsoleOutputCP(1251);
  33. setlocale(LC_ALL, "rus");
  34. int i, vibor1, vibor2;
  35. printf("Пожалуйста, введите дисциплины обучения студентов (предметы):\n");
  36. printf("Введите название 1 - ого предмета (до 20-ти знаков):");
  37. gets (predmet1);
  38. printf("Введите название 2 - ого предмета (до 20-ти знаков):");
  39. gets (predmet2);
  40. printf("Введите название 3 - ого предмета (до 20-ти знаков):");
  41. gets (predmet3);
  42. printf("Как вы хотите получить информацию о студентах?\n");
  43. printf("1. - Из файла\n");
  44. printf("2. - Вручную\n");
  45. scanf("%d", &vibor1);
  46. FILE *fp;
  47. switch (vibor1)
  48. {
  49. case 1:
  50. fp = fopen("K16-1.txt", "r");
  51. if((fp = fopen("K16-1.txt", "r")) == NULL)
  52. {
  53. printf("ОШИБКА! Файла не существует!\n");
  54. printf("Пожалуйста, введите информацию:\n");
  55. }
  56. else
  57. {
  58. for(i = 0; i < N; i++)
  59. {
  60. fgets(stud[i].FIO, 19, fp);
  61. fscanf(fp, "%d\n", &stud[i].shif_stud);
  62. fscanf(fp, "%d\n", &stud[i].shif_grup);
  63. fscanf(fp, "%f\n", &stud[i].ocenka1);
  64. fscanf(fp, "%f\n", &stud[i].ocenka2);
  65. fscanf(fp, "%f\n", &stud[i].ocenka3);
  66. fscanf(fp, "%f\n", &stud[i].sred);
  67. }
  68. fclose(fp);
  69. break;
  70. }
  71. case 2:
  72. fp = fopen("K16-1.txt", "w");
  73. for (i = 1; i < N; i++)
  74. {
  75. printf("Введите Ф.И.О. %d-го студента (до 20-ти знаков):\n", i);
  76. fflush(stdin);
  77. fgets(stud[i].FIO, 20, stdin);
  78. fputs(stud[i].FIO, fp);
  79. printf("Введите шифр %d-го студента (6 знаков):\n", i);
  80. scanf("%d", &stud[i].shif_stud);
  81. fprintf(fp, "%d\n", stud[i].shif_stud);
  82. printf("Введите шифр группы %d-го студента (6 знаков):", i);
  83. scanf("%d", &stud[i].shif_grup);
  84. fprintf(fp, "%d\n", stud[i].shif_grup);
  85. printf("Введите оценку студента по дисциплине %s (1 знак):", predmet1);
  86. scanf("%f", &stud[i].ocenka1);
  87. fprintf(fp, "%f\n", stud[i].ocenka1);
  88. printf("Введите оценку студента по дисциплине %s (1 знак):", predmet2);
  89. scanf("%f", &stud[i].ocenka2);
  90. fprintf(fp, "%f\n", stud[i].ocenka2);
  91. printf("Введите оценку студента по дисциплине %s (1 знак):", predmet3);
  92. scanf("%f", &stud[i].ocenka3);
  93. fprintf(fp, "%f\n", stud[i].ocenka3);
  94. stud[i].sred = alg_1(stud[i].ocenka1, stud[i].ocenka2, stud[i].ocenka3);
  95. fprintf(fp, "%f\n", stud[i].sred);
  96. }
  97. fclose(fp);
  98. break;
  99. }
  100. system("cls");
  101. while (vibor2 != 4)
  102. {
  103. printf("_____________________________________________________________________________________________\n");
  104. printf(" |-----------Меню----------| \n");
  105. printf(" \n");
  106. printf(" | Выберите пожалуйста действие | \n");
  107. printf(" \n");
  108. printf(" 1. - Вывести список студентов, получающих степендию \n");
  109. printf(" 2. - Список студентов, умеющих неудовлетворительные оценки \n");
  110. printf(" 3. - Вывод оценок студента по всем дисциплинам \n");
  111. printf(" 4. - Выход \n");
  112. printf("_____________________________________________________________________________________________\n");
  113. scanf("%d", &vibor2);
  114. system("cls");
  115. switch (vibor2)
  116. {
  117. case 1:
  118. printf("%-20s%-20s%-20s%-20s\n", shif_stud, shif_grup, FIO, sred);
  119. for (i = 0; i < N; i++)
  120. {
  121. if (stud[i].sred >= 4)
  122. {
  123. printf("%-20d%-20d%-20s%-20f\n", stud[i].shif_stud, stud[i].shif_grup, stud[i].FIO, stud[i].sred);
  124. }
  125. }
  126. getch();
  127. system("cls");
  128. break;
  129. case 2:
  130. printf("%-20s%-20s%-20s%-20s\n", shif_stud, shif_grup, FIO, sred);
  131. for (i = 0; i < N; i++)
  132. {
  133. if (stud[i].sred < 3)
  134. {
  135. printf("%-21d%-20d%-20s%-20f\n", stud[i].shif_stud, stud[i].shif_grup, stud[i].FIO, stud[i].sred);
  136. }
  137. }
  138. getch();
  139. system("cls");
  140. break;
  141. case 3:
  142. printf("%-20s%-20s%-20s%-20s%-20s%-20s\n", FIO, shif_grup, shif_stud, predmet1, predmet2, predmet3);
  143. for (i = 0; i < N; i++)
  144. {
  145. printf("%-20s", stud[i].FIO);
  146. printf("%-20d%-20d%-20f%-20f%-20f\n", stud[i].shif_grup, stud[i].shif_stud, stud[i].ocenka1, stud[i].ocenka2, stud[i].ocenka3);
  147. }
  148. getch();
  149. system("cls");
  150. break;
  151. case 4:
  152. printf("До свидания!");
  153. getch();
  154. break;
  155. default:
  156. printf("Неверное действие! Повторите ввод.");
  157. getch();
  158. system("cls");
  159. break;
  160. }
  161. }
  162. }

Решение задачи: «При выводе строки на экран появляется не нужный перенос строки»

textual
Листинг программы
  1. попробуйте так:
  2. fgets(stud[i].FIO, 20, stdin);
  3. for(int j = 0; stud[i].FIO[j]; j++)
  4.     if(stud[i].FIO[j] == '\n')
  5.         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

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

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

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