关于C语言puts的小问题

puts和gets只能输出和输入纯字母吗?我输入字符串带有数字的,输出就会有莫名其妙的符号多出来(之前粘贴错了,已经修改)

#include <stdio.h>
#include <string.h>
int main()
{char s1[100],s2[100];
int a,i;
gets(s1);
a=strlen(s1);
for(i=0;i<a;i++)
{s2[i]=s1[a-i-1];
}
puts(s2);
}

img

你的代码和你的输出也不是对应的啊,为啥这么贴出内容呢

代码判断回文数
输出是翻转

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 请看👉 :C语言:实现puts函数,gets函数
  • 除此之外, 这篇博客: C语言:字符数组中的 (2)puts函数:输出字符串的函数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述

  • 以下回答来自chatgpt:

    答案:

    问题解析:问题描述了在使用C语言的puts函数输出字符串时,字符串中如果带有数字或其他非字母符号,会导致输出结果出现莫名其妙的符号,应该如何处理。

    解决方案:在使用puts函数输出字符串时,如果字符串中包含数字或其他非字母符号,应该使用特定的方式来处理输出。一种常见的处理方法是使用转义字符,将特殊字符转换为对应的字符表示。例如,如果想输出双引号字符",可以使用转义字符\"代替,如果想输出反斜杠字符\,可以使用转义字符\代替。另外,在输出字符串之前,可以先对字符串进行处理,将其中的特殊字符转换为转义字符,这样可以避免在输出时出现莫名其妙的符号。下面是一个简单的例子,演示如何使用转义字符输出一个包含特殊字符的字符串:

    #include <stdio.h>
    
    int main()
    {
        char str[] = "Hello, \"world\"!";
        puts(str);
        return 0;
    }
    

    上面的代码中,定义了一个包含特殊字符的字符串,使用双引号将特殊字符括起来,并使用转义字符\"代替其中的双引号字符。然后使用puts函数输出该字符串,输出结果为:

    Hello, "world"!
    

    可以看到,特殊字符被正确地输出了。

    如果需要动态地将特殊字符转换为转义字符,可以使用字符串处理函数,例如strncpy、strtok等。下面是一个简单的例子,演示如何使用strncpy函数将特殊字符转换为转义字符:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char str1[] = "Hello, \"world\"!";
        char str2[20] = {0};
        strncpy(str2, str1, sizeof(str2) - 1);
        char *p = strtok(str2, "\"");
        while (p != NULL)
        {
            printf("%s", p);
            if ((p = strtok(NULL, "\"")) != NULL)
            {
                // 输出转义字符
                printf("\\\"");
            }
        }
        printf("\n");
        return 0;
    }
    

    上面的代码中,定义了一个包含特殊字符的字符串,使用strncpy函数将该字符串复制到另一个字符串数组中,并使用strtok函数依次分割字符串,并输出分割后的子串。在输出含有特殊字符的子串时,需要同时输出转义字符,因为strtok函数在分割时并不会保留特殊字符。上面的代码输出结果为:

    Hello, \\"world\\"
    

    可以看到,特殊字符被正确地转换为了转义字符。

    如果还有其他的特殊字符需要转义,请根据需要自行处理。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^