【问题标题】:Loop iterates as many time as the number of characters in input循环迭代的次数与输入中的字符数一样多
【发布时间】:2014-11-15 17:47:07
【问题描述】:

我知道我的标题很奇怪。我不知道怎么用语言表达。

基本上,我有一个循环询问用户是否想再次运行该程序,“你想再次运行吗(y/n)。 如果我输入一个字符,它将循环一次。但如果我输入 5 个字符“你好”,它将迭代 5 次。

例如。 你想再跑一次吗? (是/否)

q

你想再次跑步吗? (是/否)

你好

你想再次跑步吗? (是/否)

你想再次跑步吗? (是/否)

你想再次跑步吗? (是/否)

你想再次跑步吗? (是/否)

你想再次跑步吗? (是/否)

这是我的代码:

 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(" %c", &a); to scanf("%s", &a);
  • 这可能会更好,但它仍然不正确,因为您在a 的地址后面写。如果您不想关心缓冲区,getline() 可能是您的选择。

标签: c input while-loop


【解决方案1】:

这是因为,scanf 从缓冲区获取输入参数。对于每个有效参数
(与格式匹配的)scanf 执行其工作,但如果遇到无效
参数(与格式不匹配)它离开(跳过)缓冲区中的参数。

现在,在您的代码中,您将“Hello”作为输入并使用格式说明符“%c”
因此,scanf 将您的输入解释为“H”、“E”、“L”、“L”、“O”,因为您因此使用了“%c”
它逐个字符地读取输入,因为所有五个字符都是有效的
字符输入,因此将打印所有五个字符的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多