输入
输入中将有几行以包含单个*
的行结尾。最后一行不应该被处理。每行将包含Hajj
或Umrah
。
输出
对于输入的每一行,在单独的行中输出Hajj-e-Akbar
或Hajj-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
有所作为。
谢谢。
对不起,如果我不能正确解释我的问题。我是编程新手。
想要通过我的信誉添加评论不符合要求。尝试阅读http://c-faq.com/stdio/scanfhang.html它说明了如何\ n不被当作scanf中的换行符
scanf
读取格式化的输入,因此当您使用%s\n”, &str
时,字符串将被使用,换行符将被使用,当您按Enter键时,它将出现在缓冲区中,因此字符串和换行符将被使用,字符串将被存储,而换行符将被丢弃。
[当您使用“%s”, &str
时,换行符将保留在缓冲区中并在下一个循环中使用,因此str
将存储在第一次迭代中,而"\n"
将存储在以下位置的str
中在下一次迭代中,只有这样,才会在第三次迭代中要求您再次输入。
正确的用法是“%s\n”, str
,str
已经是您应该使用&
的指针。