C语言 输出亲朋字符串

c语言 输出亲朋字符串。
输入字符串中没有空格和回车键,所以我觉得用printf或者gets都可以。然而用gets20组数据全通过,用printf只通过了一组。这是什么情况啊,真不明白了。

img


下面是代码:

#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遇到空格,就不往下读了