扫描值直到获得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);
}
- 如果没有特殊原因,请使用double not float(例如使用不带double FPU的uC)。
- 您不初始化变量
- 总是检查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个问题。
首先,我建议您使用有意义的变量名称。 number1
,number2
等,并且表示给定输入数量的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中的重要字符的主要内容,如果未能解决你的问题,请参考以下文章