Почему моя программа C печатает новые пустые строки, когда я пытаюсь напечатать строку в обратном порядке? - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь создать программу, которая возвращает число и строку с элементами в обратном порядке. Я смог сделать и то и другое, но я не понимаю, почему появляются новые пустые строки, когда я печатаю обратную строку

Я также попробовал это с одним словом, используя функцию scanf, и все еще появляется пустая строка

#include <stdio.h>
#include <stdlib.h>

int main()
{
   char s[50];
   int i, n, lastDigit, textLen=0;

   printf("Enter a number: ");
   scanf("%i", &n);
   getchar();

   printf("Enter the text: ");
   fgets(s, 50, stdin);

   printf("The reversed number is: ");

   while(n > 0){
    lastDigit = n%10;
    n=n/10;
    printf("\n%i", lastDigit);
   }

    printf("\nThe reversed text is: ");

     while(s[textLen] != '\0'){
        textLen++;
    }

   for(i=textLen; i>=0; i--){
    printf("\n%c", s[i]);
   }

return 0;
}

Я ожидаю: T е s T Но фактический результат:

T е s т

Ответы [ 2 ]

2 голосов
/ 25 мая 2019

со страницы руководства fgets

fgets() читает не более одного символа размером меньше из потока и сохраняет их в buffer, указанном s. Чтение останавливается после EOF или newline. Если прочитано newline, оно сохраняется в буфер . Так вот

char s[50];
fgets(s, 50, stdin);

fgets() сохраняет символ новой строки в конце буфера s, если он был прочитан. Чтобы удалить этот завершающий символ \n, используйте strcspn(). Например,

char s[50] = {}; /* Initialize it */
fgets(s, 50, stdin); 
s[strcspn(s, "\n")] = 0; /* remove the trailing \n */
1 голос
/ 25 мая 2019

textLen - количество символов в строке s.Первый напечатанный символ - s[textLen], который является символом NUL в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...