【问题标题】:C Program skips a lineC程序跳过一行
【发布时间】:2014-11-18 09:36:22
【问题描述】:

所以当提示我输入 p 的值时,如果我输入的字符太少,它会将我带到下一行而不是下一个提示。如果我输入足够大的输入,它可以正常工作。另外,我重新运行程序似乎不起作用。

#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;
}

输出:

 Enter a p value:
 1
 1
 Enter a q value:
 1000
 0

【问题讨论】:

  • 您的程序和输出不匹配。这也不是您在问题中描述的问题,输出比程序多。
  • 这正是我为该输入获得的输出。我拍了一张照片,但我现在不能和我的小代表一起发布。
  • 那么您发布的代码已过期。您没有打印读取的值,但提示之间有 2 个数字。当我逐字运行此代码时,它会打印出不同的内容。

标签: c while-loop stdin


【解决方案1】:

首先,你的代码行有错误

while((a[0]!='y') && (a[0]='Y') && (a[0]!='n') && (a[0]!='N'))

您错过了“!”第二个条件中的字符 对于您的问题,使用此行的原因是什么:

while ((c = fgetc(stdin)) != '\n' && c != EOF);

如果我们使用控制台,它只需要再等待一个 '\n' 因为上一张是fgets拍的

【讨论】:

    猜你喜欢
    • 2016-01-31
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多