【问题标题】:Two inputs for break to work两个输入用于休息工作
【发布时间】:2017-02-02 01:39:14
【问题描述】:

我一直在尝试编写一个程序,在计算结束时询问我们是否希望根据提供的输入退出它。但是,如果我输入 n,它会等待另一个输入以退出程序,并在第二个输入后退出。有没有办法避免这种情况?以及发生这种情况的原因。这是完整的代码。

#include<stdio.h>

int main()
{ 
    float num1, num2;
    char op, cont;
    while(1)
    {
        scanf(" %f %c %f",&num1,&op,&num2);


        if (op=='+')
            printf("%.3f \n",num1+num2);
        else if(op=='-')
            printf("%.3f \n",num1-num2);
        else if(op=='*')
            printf("%.3f \n",num1*num2);
        else if(op=='/')
        {
            if(num2==0)
                printf("Look where you put your zeroes\n");
            else
                printf("%.3f\n",num1/num2);
        }
        else if(op=='%')
            printf("%d\n",(int)num1%(int)num2);
        else 
        {
            printf("What was the crap you just entered?\n");
        }

        printf("Continue using calc?[y/n]");
        scanf(" %c\n",&cont);
        if (cont=='n')
            break;
    }

    return 0;
}

【问题讨论】:

  • 尝试使用cont=getchar(); 而不是scanf(" %c\n", &amp;cont);
  • 毫无疑问是\n 导致了这个问题..
  • 是的@ParnabSanyal 成功了!谢啦。也知道为什么会这样吗?因为我输入 y 它似乎工作得很好。
  • 没有。 @KrishnaChaitanya。看起来它工作正常。但事实并非如此。
  • 不要在scanf) 格式字符串中放置尾随空格,甚至是换行符。格式字符串中的任何空格(例如空格、制表符或换行符)都会跳过零个或多个空格字符,直到遇到不是空格或 EOF 的字符时才会停止。这意味着它会一直读取,直到您键入不是空白的内容。您必须预测下一个输入需要从什么开始才能停止当前输入。这对你的用户来说很糟糕! %c 前的前导空白是好的;尾随换行很糟糕!算了吧。该代码将正常工作。

标签: c loops while-loop break


【解决方案1】:

【讨论】:

  • &应该是%吗?尾随的换行符仍然是一场灾难,即使您修复了 &。有关详细信息,请参阅我对主要问题的评论。
  • 错过了。谢谢
【解决方案2】:

在进行以下更改后,我的程序可以正常工作:

char op, cont='y';
while(cont == 'y')

scanf(" %c", &cont);

【讨论】:

    【解决方案3】:

    由于上次scanf而出现问题。为了执行 num1 op num2 的第一个 scanf ,它需要返回(Enter),然后在执行 scanf for char count 时,它将最后一个 retun 键(Enter)作为输入。所以它再次要求 num1 op num2 。这可以通过多种方式停止,要通过 scanf 停止它,请使用“scanf(℅c℅*c,&count)”。%*c 将忽略该返回键输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2014-09-27
      • 2018-10-05
      • 2014-04-25
      • 1970-01-01
      相关资源
      最近更新 更多