扫描值直到获得C中的重要字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扫描值直到获得C中的重要字符相关的知识,希望对你有一定的参考价值。

对于我的作业,我正在尝试编写一个计算器,该计算器还可以计算所取数字的平均值。我不想问数字的数目,因为我们的老师不希望那样做。所以我想到了扫描值,直到用户按下“ p”。但您可能会猜到,数字是浮点数,“ p”是一个字符。我想做的是将扫描的值分配给它们(如果可能)。我尝试了不同的方法,使用了代码,但是无法正常工作。因此,我正在寻求您的建议。

当输入p时,它会打印一个值,例如第3、5、7(奇数)个(有时是正确的,有时是错误的,但如果我知道了,我可以解决这个问题)。但是它在其他情况下不会显示任何值,并且期望用户提供无限的输入。

这是我为此编写的代码。我实际上想知道scanf("%f %c", &number1, &pause);命令。

#include<stdio.h>

float number1, number2, i, result;
char pause;

int main() {
  scanf("%f", &number1);
  i = 0;
  while (pause != 'p') {
    number2 = number1 + number2;
    scanf("%f %c", &number1, &pause);
    i++;
  }
  result = number2 / (i - 1);
  printf("%f", result);
}
答案
  1. 如果没有特殊原因,请使用double not float(例如使用不带double FPU的uC)。
  2. 您不初始化变量
  3. 总是检查I / O操作的结果。
#include <stdio.h>

int main () 
{
    double number1= 0, number2 = 0, i = 0, result = 0;   
    char pause = 0;
    char line[128];

    while (pause != 'p')
    {    
        if(fgets(line, sizeof(line), stdin))
        {
            if(sscanf(line, "%lf %c",&number1, &pause) != 2)
            {
                printf("Wrong input - try again
");
                pause = 0;
                continue;
            } 
            number2 = number1 + number2;
           i++; 
        }
        else
        {
            // do something with I/O error
        }
    } 
    result = number2 / (i-1);
    printf("%lf",result); 
}

您可以自己玩:https://onlinegdb.com/Hy3y94-3r

另一答案

我注意到您的代码存在3个问题。

首先,我建议您使用有意义的变量名称。 number1number2等,并且表示给定输入数量的i可以是int而不是float

其次,您缺乏向用户打印程序中正在发生的情况的信息;最好有诸如“输入您的电话号码,您想停止吗?结果是...等”之类的消息。

最后,在一行代码中有两个输入会使调试变得困难,因为知道对于初学者来说,用C语言读取字符串和字符已经很困难。例如,%c在转换字符之前不会跳过空格,并且可以从先前的数据条目中获取换行符。

这是我的解决方法:我更改了一些变量的名称,打印了一些消息,并在两个不同的行中读取了两个输入,并在其中加上了scanf(" %c"),以避免出现此问题。

#include<stdio.h>

float sum, temp, result;  
int nb;
char pause;

int main () {

        pause='a';
        while (pause != 'p'){

            printf("Enter your number: ");
            scanf("%f",&temp);
            sum+=temp;
            nb++;

            printf("type 'p' if you want to stop: ");
            scanf(" %c",&pause);
        }    

        result = sum / nb;
        printf("the average is : %f",result); 

}

我测试过,应该可以正常工作

以上是关于扫描值直到获得C中的重要字符的主要内容,如果未能解决你的问题,请参考以下文章

c语言strtod()函数的用法

我的javascript片段返回“非法字符”

读取文件直到 C 中的一个字符

Python:扫描文件中的子字符串,保存位置,然后返回它

从书中复制C#代码(假人为C#.0,无法获得预期的结果

如何优化C ++代码的以下片段 - 卷中的零交叉