循环迭代的次数与输入中的字符数相同
问题描述:
我知道我的标题很奇怪。我不知道怎么说。如果我要输入一个字符,它会循环一次,但如果我输入一个字符,它会循环一次,但如果我再次输入一个字符,我输入5个字符 “你好”,它会遍历5倍。循环迭代的次数与输入中的字符数相同
前。 你想再次运行?(Y/N)
q
你想再次运行?(Y/N)
你好
您想再次运行吗? (y/n)
您想再次运行吗? (y/n)
您想再次运行吗? (y/n)
您想再次运行吗? (y/n)
您想再次运行吗? (Y/N)
这是我的代码:
char a='y';
while(a=='y' || a=='Y')
{
printf("Enter a p value: \n");
scanf("%d",&p);
printf("Enter a q value: \n");
scanf(" %d",&q);
printf("Enter a k value: \n");
scanf(" %d",&k);
for (i=p; i<q+1; i++)
{
Q=i;
sum=0;
count=0;
while(Q>0)
{
count++;
r = Q%10;
sum = sum + pow(r,k);
Q = Q/10;
}
if (i == sum && i>1 && count==k)
{
printf("%d\n",i);
}
i++;
}
a='z';
while(a !='y' && a !='Y' && a!='n' && a!='N')
{
printf("Would you like to run again? (y/n) \n");
scanf(" %c", &a);
}
答
这是因为,scanf的从缓冲器采取它输入参数。对于每个有效参数
(与格式相匹配的参数),scanf会执行其作业,但如果遇到无效的参数(与格式不匹配),它将在缓冲区中保留(跳过)参数。
现在,在您的代码中,您将“Hello”作为输入并使用格式说明符“%c”
因此scanf将输入解释为'H','E','L','L' ,“O”,因为您已经使用“%C”因此
它读出由字符输入字符和因为所有的五个字符是有效的
字符输入因此输出获取打印所有五个字符。
这可能是因为你要求一个字符。询问整条线并检查允许的值。并阅读您在代码中使用的函数的文档。询问时请使用最少的示例。 – 2014-09-21 18:45:49
非常感谢。这工作。我刚换的scanf(“%C”,&a);到scanf函数(“%S”,&a); – 2014-09-21 18:51:17
这可能更好地工作,但你写了''的地址后面它仍然不是正确的。如果你不想关心缓冲区,'getline()'可能是您的选择。 – 2014-09-21 18:55:20