C程序跳过一行
因此,当提示我输入p的值时,如果输入的字符太少,它会将我带到下一行,而不是下一个提示。如果我输入足够大的输入,它可以正常工作。而且,我重新运行的程序似乎不起作用C程序跳过一行,c,while-loop,stdin,C,While Loop,Stdin,因此,当提示我输入p的值时,如果输入的字符太少,它会将我带到下一行,而不是下一个提示。如果我输入足够大的输入,它可以正常工作。而且,我重新运行的程序似乎不起作用 #include <stdio.h> #include <math.h> #include <limits.h> #include <ctype.h> int main() { char pbuffer[10], qbuffer[10], kbuffer[10]; int
#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <ctype.h>
int main()
{
char pbuffer[10], qbuffer[10], kbuffer[10];
int p=0, q=0, k=0;
int r, i, Q, c, count, sum;
char a[3];
a[0]='y';
while(a[0]=='y' || a[0]=='Y')
{
printf("Enter a p value: \n");
fgets(pbuffer, sizeof(pbuffer), stdin);
while ((c = fgetc(stdin)) != '\n' && c != EOF);
p = strtol(pbuffer, (char **)NULL, 10);
printf("Enter a q value: \n");
fgets(qbuffer, sizeof(qbuffer), stdin);
while ((c = fgetc(stdin)) != '\n' && c != EOF);
q = strtol(qbuffer, (char **)NULL, 10);
printf("Enter a k value: \n");
fgets(kbuffer, sizeof(kbuffer), stdin);
while ((c = fgetc(stdin)) != '\n' && c != EOF);
k = strtol(kbuffer, (char **)NULL, 10);
while(p<q+1)
{
Q=p;
sum=0;
count=0;
while(Q>0)
{
count++;
r = Q%10;
sum = sum + pow(r,k);
Q = Q/10;
}
if ( p == sum && i>1 && count==k )
{
printf("%d\n",p);
}
p++;
a[0]='z';
}
while((a[0]!='y') && (a[0]='Y') && (a[0]!='n') && (a[0]!='N'))
{
printf("Would you like to run again? (y/n) ");
fgets(a, sizeof(a), stdin);
}
while ((c = fgetc(stdin)) != '\n' && c != EOF);
}
return 0;
}
首先,代码行中有一个错误
while((a[0]!='y') && (a[0]='Y') && (a[0]!='n') && (a[0]!='N'))
你错过了“!”第二种情况下的角色
对于你的问题,使用这一行的原因是什么:
while ((c = fgetc(stdin)) != '\n' && c != EOF);
如果我们使用console,只需再等待一个“\n”
因为上一个由fgets执行您的程序和输出不匹配。这也不是你在问题中描述的问题,输出比程序多。这正是我从输入中得到的输出。我拍了一张照片,但是我现在不能和我的小代表一起发布。那么你发布的代码已经过时了。您没有打印读取的值,但提示之间有两个数字。当我逐字运行这段代码时,它会打印一些不同的内容。
while ((c = fgetc(stdin)) != '\n' && c != EOF);