scanf(“%s”,&str)和scanf(“%s \ n”,&str)有什么区别?

问题描述 投票:1回答:2

输入

输入中将有几行以包含单个*的行结尾。最后一行不应该被处理。每行将包含HajjUmrah

输出

对于输入的每一行,在单独的行中输出Hajj-e-AkbarHajj-e-Asghar,而不用报价。有关确切的格式,请参阅示例。

这是我针对此问题的代码。

#include <stdio.h>

int main()
{
    char str[100];
    int i = 1;

    while (scanf("%s", &str))
    {
        if (str[0] == '*')
            break;
        else if (str[0] == 'H')
            printf("Case %d: Hajj-e-Akbar\n", i);
        else
            printf("Case %d: Hajj-e-Asghar\n", i);
        i++;
    }
}

用于输入

Hajj
Umrah
*

[一次给出此输入时,程序通过打印提供了预期的输出

Hajj
Case 1: Hajj-e-Akbar
Umrah
Case 2: Hajj-e-Asghar
*

但是在获得*作为输入后,程序正在等待Enter。点击Enter后,程序终止。但是我希望我的程序在得到*作为输入时终止,而不是按Enter。请在这里帮助我。但这不是我的问题。我的问题是相同的输入-

Hajj
Umrah
*

[当我通过scanf("%s\n", &str)接受输入时。程序在第一个输入Case 1: Hajj-e-Akbar之后不打印输出Hajj,但是在获取第二个输入Umrah之后打印第一个输入的输出。然后,程序正在等待输入Enter*。输出是这样的

Hajj
Umrah
Case 1: Hajj-e-Akbar
*

然后我按Enter,它为第二个输入Case 2: Hajj-e-Asghar打印输出Umrah然后等待其他输入。按下Enter后,输出看起来像。

Hajj
Umrah
Case 1: Hajj-e-Akbar
*
Case 2: Hajj-e-Asghar

我不明白\n如何使scanf有所作为。

谢谢。

对不起,如果我不能正确解释我的问题。我是编程新手。

c scanf
2个回答
0
投票

想要通过我的信誉添加评论不符合要求。尝试阅读http://c-faq.com/stdio/scanfhang.html它说明了如何\ n不被当作scanf中的换行符


0
投票

scanf读取格式化的输入,因此当您使用%s\n”, &str时,字符串将被使用,换行符将被使用,当您按Enter键时,它将出现在缓冲区中,因此字符串和换行符将被使用,字符串将被存储,而换行符将被丢弃。

[当您使用“%s”, &str时,换行符将保留在缓冲区中并在下一个循环中使用,因此str将存储在第一次迭代中,而"\n"将存储在以下位置的str中在下一次迭代中,只有这样,才会在第三次迭代中要求您再次输入。

正确的用法是“%s\n”, strstr已经是您应该使用&的指针。

© www.soinside.com 2019 - 2024. All rights reserved.