#include <stdio.h>
#define MINIMUM 1
#define MAXIMUM 20
int main ()
{
//Declaring variables.
char name[50];
int number, even_sum, odd_sum, even_count, odd_count;
//Sets all variables to zero.
even_sum=0;
odd_sum=0;
even_count=0;
odd_count=0;
//Asks the user to enter their name and their choice of numbers.
printf("Please enter your first name.\n");
scanf("%s", name);
printf("Please enter integer numbers ranging from 1 to 20; when you're finished entering numbers, enter 0.\n");
scanf("%d", &number);
//Begins loop to decide if the numbers entered are even or odd and adding them to respective totals.
while (number>=MINIMUM && number<=MAXIMUM)
{
printf("Please enter integer numbers ranging from 1 to 20; when you're finished entering numbers, enter 0.\n");
scanf("%d", &number);
if (number%2==0)
{
even_sum += number;
even_count++;
}
else
{
odd_sum+=number;
odd_count++;
}
}
//Separating each line makes it easier to read. The following lines print out the final count and totals of all numbers entered.
printf("\n%s, the numbers you entered are broken down as follows:\n\n", name);
printf("You entered %d even numbers with a total value of %d.\n", even_count, even_sum);
printf("You also entered %d odd numbers with a total value of %d.\n", odd_count, odd_sum);
return 0;
}
我最后一次运行它时使用了整数2,4,3,并退出0。 输出说我有2个偶数条目,总值为4。 另外,我有1个奇数条目,总共3个。
奇数输出是正确的,但偶数总是错误的,我无法弄清楚我做错了什么。
答案 0 :(得分:1)
很难说什么是错误的,因为提供的代码片段没有全面展示。 你在减少
号
变量?
请进行一些测试并提供结果,例如1,3,5,7,11,13。
-
正如@Deddy发现的那样,你需要在循环中添加一个exit语句, 所以,当用户提供0时,请跳过它
if (number>0){
if (number%2==0)
{
....
}
不要忘记关闭括号: - )
答案 1 :(得分:0)
你得到3个偶数,因为你的输入不是2 4 3,它是2 4 3 0。
当你输入0时,程序正在等待scanf上的输入,然后继续检查是否输入0。
因为0%2 == 0你向偶数计数器加了1,然后你检查了while条件,发现输入为0并且停止了while循环。
新代码之后: 当您的程序要求您输入下一个号码时,您在while循环外输入的第一个号码将丢失,您从未将其添加到任何计数器,因此您的程序自然不会考虑它。
您输入了号码,之后您立即要求提供新号码。 我的一位教授曾经告诉我 - 如果一台计算机进行了计算,但没有存储它 - 是否进行了计算?
解决问题的方法之一是将while循环中的scanf移动到循环的末尾。
这样,第一个数字将计算到结果,导致退出的输入不会。
File.open('new_edf.edf', 'wb') { ... }
答案 2 :(得分:0)
因此决定使用额外的变量重构逻辑循环
#include <stdio.h>
#define MINIMUM 1
#define MAXIMUM 20
int main ()
{
//Declaring variables.
char name[50];
int number, even_sum, odd_sum, even_count, odd_count;
bool canWeGo;
//Sets all variables to zero.
even_sum=0;
odd_sum=0;
even_count=0;
odd_count=0;
canWeGo=true;
while (canWeGo)
{
printf("Please enter integer numbers ranging from 1 to 20; when you're finished entering numbers, enter 0.\n");
scanf("%d", &number);
canWeGo = number>=INIMUM && number<=MAXIMUM;
if (canWeGo)
{
if (number%2==0)
{
even_sum += number;
even_count++;
}
else
{
odd_sum+=number;
odd_count++;
}
}
}
/Separating each line makes it easier to read. The following lines print out the final count and totals of all numbers entered.
printf("\n%s, the numbers you entered are broken down as follows:\n\n", name);
printf("You entered %d even numbers with a total value of %d.\n", even_count, even_sum);
printf("You also entered %d odd numbers with a total value of %d.\n", odd_count, odd_sum);
return 0;
}
答案 3 :(得分:0)
问题是您在进入循环后丢弃了第一个数据,因为您正在再次读取它(因此丢弃它)
你最好移动printf(); scanf()的;循环中的序列到它的结尾,所以你确实可以在数据输入正常时使用它。
您的代码中存在两个问题:您正确地检查输入数据是否在两个限制之间以进入处理,但是一旦进入循环,您将丢弃这些数据以用于新数据。这使得数据不再被检查(因此它可以是用于退出循环的令牌数据,这使得它可以作为数据处理,但它不能)。并且您将must_not
作为数据处理,并且第一个数据完全被忽略。
要解决您的问题,解决方案可以是将循环中的{
"from": 0,
"size": 1000,
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "data",
"query": {
"match": {
"data.city": "california"
}
}
}
}
],
"must_not": [
{
"term": {
"_id": "01921asda01201"
}
}
]
}
}
}
序列移动到它的最后部分,在这种情况下,您将在第一个数据案例中处理数据,而不是最后输入0
时再次进入循环。