Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;从列表中计算奇数 我尝试用C++编写一个程序,用户应该输入10个整数,并将奇数的数目分给用户。例如,用户输入:7,26,44,3,78,3,24,66,25,90,12,输出为“列表中有3个奇数”_C++ - Fatal编程技术网

C++;从列表中计算奇数 我尝试用C++编写一个程序,用户应该输入10个整数,并将奇数的数目分给用户。例如,用户输入:7,26,44,3,78,3,24,66,25,90,12,输出为“列表中有3个奇数”

C++;从列表中计算奇数 我尝试用C++编写一个程序,用户应该输入10个整数,并将奇数的数目分给用户。例如,用户输入:7,26,44,3,78,3,24,66,25,90,12,输出为“列表中有3个奇数”,c++,C++,我似乎找不到我做错了什么。非常感谢您的帮助 这是我的节目: #include <iostream> using namespace std; int main() { int limit; int counter; int sum; int number; cout<<"Enter 10 digits:"<<endl; cin>>limit; counter=0; sum=0;

我似乎找不到我做错了什么。非常感谢您的帮助

这是我的节目:

#include <iostream>
using namespace std;
int main()
{   
    int limit;
    int counter;
    int sum;
    int number;
    cout<<"Enter 10 digits:"<<endl;
    cin>>limit;
    counter=0;
    sum=0;

    while (counter < limit)
    {
        cin>>number;

        counter++;
        if (number%2==1)
            sum++;
    }

    cout<<"the number of odd numbers are"<<sum<<endl;
}
#包括
使用名称空间std;
int main()
{   
整数极限;
整数计数器;
整数和;
整数;
库特号码;
计数器++;
如果(编号%2==1)
sum++;
}

cout您的代码在while循环中出错。在那里写编号是没有意义的。您已经获取了所需的10位数字。while循环当前请求用户输入
N
次数,其中
N
等于输入的10位数字

您的目标是从
int limit
中提取一个数字,并检查它是偶数还是奇数。以下是修改后的代码:

while (limit != 0)
{
  int digit = limit % 10; // extract last digit of limit
  limit = limit / 10; // remove last digit from limit
  if (digit % 2 == 1) // check if digit is odd
    sum++;
}

编辑:正如MikeHousky所指出的,应该使用long-long来存储10位数字。更合理的做法是以字符串的形式进行输入,然后对字符串进行操作。

目前,您告诉用户“输入10位数字”,我认为这意味着一个10位数字。然后你循环直到他们输入了那个数字。因此,如果我输入1234567890,我将在那里度过余生,输入数字

也许在用户输入非
int
之前接受
int
的东西更有意义:

cout << "Enter numbers, to quit type: exit" << endl;
cout << "the number of odd numbers are " << count_if(istream_iterator<int>(cin), istream_iterator<int>(), [](int i)->bool{return i & 1;}) << endl;

我似乎找不到我做错了什么-你能详细说明一下吗?这个程序有什么问题?应该是一个10位数字中有多少个奇数位吗?我不知道你是如何理解这个逻辑的问题是什么?它应该可以工作,但你的代码有点误导,你应该没有指定输入是什么样子的。如果输入由空格、制表符或换行符分隔的10位数字组成,那么您的程序确实可以工作。如果您正在读取10个连续数字,
cin>>number
会将整个内容读取为单个int值,如果结果>=2^31,则会丢失前导零并产生垃圾。您还可以使用
while(limit!=0)
控制循环,使其在任何大小的数字上运行。while条件是错误的,如果第一个数字是0,这将不起作用,如果在一台int等于或小于32位的机器上有3个或更多,这也不起作用。谢谢。编辑了while循环@MikeHousky,你能解释一下你评论的第二部分吗?@NathanOliver不介意前导零,因为他在数数字,但不使用总和。如果尝试将3123456789读入32位int,则会出现溢出。您需要更宽的数字类型,以避免一次读取字符。谢谢您,乔纳森。我意识到我的问题犯了一个严重的错误,所以你们中的许多人都不清楚。我在问题中的意思是,用户应该输入10个整数,而不是10个数字。