当我尝试以相反的顺序打印字符串时,为什么我的C程序会打印新的空白行?

时间:2019-05-25 16:47:59

标签: c string

我正在尝试创建一个程序,该程序以相反的顺序返回带有元素的数字和字符串。我都能做到,但是我不明白为什么在打印反转字符串时为什么会有一些空白的新行

我也使用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;
}

我希望: Ť Ë s Ť 但是实际输出是:

T Ë s t

2 个答案:

答案 0 :(得分:2)

fgets的手册页中

  

fgets()从流中读取的字符数最多不超过大小字符   并将它们存储到s指向的buffer中。读后停止   EOFnewline如果读取了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 :(得分:1)

s是字符串s[textLen]中的字符数。打印的第一个字符是function goto(event,el) { url=el.href; event.preventDefault(); window.history.pushState('','',url); $('html').load(url); } window.onpopstate = function(event) { //alert("location: " + document.location + ", state: " + JSON.stringify(event.state)); $('html').load(''+document.location+''); }; <a href="photos.php" onclick="goto(event,this);">Photos</a> <a href="followers.php" onclick="goto(event,this);">Followers</a> <a href="following.php" onclick="goto(event,this);">Following</a> ,它是末尾的NUL字符。