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);
}
你的代码和你的输出也不是对应的啊,为啥这么贴出内容呢
代码判断回文数
输出是翻转
答案:
问题解析:问题描述了在使用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\\"
可以看到,特殊字符被正确地转换为了转义字符。
如果还有其他的特殊字符需要转义,请根据需要自行处理。