c语言 输出亲朋字符串。
输入字符串中没有空格和回车键,所以我觉得用printf或者gets都可以。然而用gets20组数据全通过,用printf只通过了一组。这是什么情况啊,真不明白了。
#include<stdio.h>
#include<string.h>
int main()
{
int i;
char s[101]={0},s1[101]={0};
scanf("%s",s);//就是这一步,用gets就能全对,不理解scanf为啥不行。
for(i=0;i<strlen(s);i++)
{
if(i<strlen(s)-1)
{
s1[i]=s[i]+s[i+1];
}
else s1[i]=s[i]+s[0];
}
for(i=0;i<strlen(s);i++)
printf("%c",s1[i]);
return 0;
}
【以下回答由 GPT 生成】
问题的原因是在使用scanf函数时,输入的字符串中没有空格或回车键,scanf函数会连续读取字符串,直到遇到空格、回车或文件结尾。而使用gets函数时,它会一次性读取整行字符串,直到遇到回车为止。
在给定的代码中,使用scanf函数读取字符串的结果可能会出现问题。因为scanf函数在读取字符串时,遇到空格就会停止,并且不会将空格作为字符串的一部分。所以如果输入的字符串中有空格,scanf函数只会读取空格之前的部分作为字符串。
另外,scanf函数在读取字符串时会将换行符(回车键)留在输入缓冲区中,这可能影响后续的输入操作。而使用gets函数则没有这个问题,它会将输入缓冲区中的换行符读入,并将其作为字符串的一部分。
要解决这个问题,建议使用fgets函数来代替scanf函数,fgets函数可以一次性读取一行字符串,并且可以处理字符串中的空格和回车键。
下面是修改后的代码:
#include <stdio.h>
#include <string.h>
int main()
{
int i;
char s[101] = {0}, s1[101] = {0};
fgets(s, sizeof(s), stdin);
// 去掉换行符
if (strlen(s) > 0 && s[strlen(s)-1] == '\n') {
s[strlen(s)-1] = '\0';
}
for (i = 0; i < strlen(s); i++)
{
if (i < strlen(s) - 1)
{
s1[i] = s[i] + s[i + 1];
}
else
s1[i] = s[i] + s[0];
}
for (i = 0; i < strlen(s); i++)
printf("%c", s1[i]);
return 0;
}
在修改后的代码中,我们使用fgets函数来读取字符串,并且处理了换行符。修改后的代码应该可以正确输出亲朋字符串。
希望以上解答能够帮助你理解问题的原因,并提供了相应的解决方案。如果还有任何疑问,请随时提出。
【相关推荐】
scanf("%s", s);
getchar(); // 读取并忽略输入缓冲区中的换行符或其他残留字符
输入多组数据时,输入缓冲区中的换行符或其他残留字符干扰了scanf
函数的工作,加上面一行代码getchar();试试,看看有没有帮助
你的输入中是否有空格?scanf %s遇到空格,就不往下读了