waixiong 发表于 2022-3-6 15:51:59

c++课后作业

要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的“Enter”键时,数据输入结束。程序自动对所有的整数进行求和并打印出结果。

请帮忙指点一下代码的问题所在,谢谢!#include <iostream>
using namespace std;

int main()
{
        char ch;
        int sum=0;
        while(1)
        {       
                ch=getchar();
               
                if(ch=='\n')
                        break;
                else if(ch==' ')
                        ;
                else
                        sum+=ch;       
        }
        cout << sum << endl;
        return 0;
}

傻眼貓咪 发表于 2022-3-6 15:52:00

刚才没有注意题目,不小心写了 C 代码
C#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int num, sum = 0;
       
        while (scanf("%d", &num))
        {
                sum += num;
                char c = getchar();
                if (c == '\n') break;
        }
        printf("%d", sum);
        return 0;
}C++#include <iostream>

int main() {
        int num, sum = 0;
        while (true)
        {
                std::cin >> num;
                sum += num;
                char c = getchar();
                if (c == '\n')break;
        }
        std::cout << sum << std::endl;
        return 0;
}输入/输出:75 81          56      14       6 7    31   44    52
366

waixiong 发表于 2022-3-6 15:53:12

#include <iostream>
using namespace std;

int main()
{
        char ch;
        int sum=0;
        cout << "请输入整数或者空格,输入ENTER结束此程序:"<< endl;
        while(ch=getchar()!= '\n')
        {
                if(ch==' ')
                        break;
                else
                sum+=ch;
        }
        cout << "结果是:"<< sum;
        return 0;
}

这是第二个,也有问题

月末 发表于 2022-3-6 16:10:44

我看出来的问题就是你的定义类型不对吧,sum+=ch,整形加字符型

月末 发表于 2022-3-6 16:14:34

#include <stdio.h>
#include <stdlib.h>
int main()
{
        int i;
        char ch;
        int sum=0;
        printf("请输入一串整数和任意数目的空格:\n");
        //一直到输入的值是整数的时候进入while循环,当输入字符时,scanf返回0,什么都不读,然后再次调用scanf
        while (scanf("%d",&i)==1)
        {
                sum += i;
                while ((ch = getchar()) == ' ')//屏蔽空格
                        ;
                if (ch == '\n')
                {
                        break;
                }
                ungetc(ch,stdin);//将变量ch中存放的字符退回给stdin输入流,获取多的退回
        }
        printf("结果是:%d\n",sum);
        return 0;
}

waixiong 发表于 2022-3-6 17:11:14

月末 发表于 2022-3-6 16:10
我看出来的问题就是你的定义类型不对吧,sum+=ch,整形加字符型

谢谢你!

waixiong 发表于 2022-3-7 14:55:27

傻眼貓咪 发表于 2022-3-6 15:52
刚才没有注意题目,不小心写了 C 代码
CC++输入/输出:

你好,当输入空格时scanf并不会返回1,为什么还会进入while呢?

waixiong 发表于 2022-3-7 15:27:40

傻眼貓咪 发表于 2022-3-6 15:52
刚才没有注意题目,不小心写了 C 代码
CC++输入/输出:

另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶

傻眼貓咪 发表于 2022-3-7 15:53:27

waixiong 发表于 2022-3-7 14:55
你好,当输入空格时scanf并不会返回1,为什么还会进入while呢?

因为 scanf() 返回值是成功读取到的数据个数。

傻眼貓咪 发表于 2022-3-7 15:56:12

waixiong 发表于 2022-3-7 15:27
另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶

好的,我再研究研究一下。因为我以为题目是以空格为整数分割{:10_250:}

傻眼貓咪 发表于 2022-3-7 16:02:27

waixiong 发表于 2022-3-7 15:27
另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶

因为我用手机写代码,没有办法测试,你试试这个:#include <iostream>

int main() {
        int num, sum = 0;
        while (true){
                std::cin >> num;
                if(std::cin.eof()) break;
                sum += num;
        }
        std::cout << sum << std::endl;
        return 0;
}

hornwong 发表于 2022-3-7 16:11:33

{:5_95:}

人造人 发表于 2022-3-7 18:19:29

用正则表达式把每一个数字都提取出来,然后求和,就是这样
都C++了,就不要什么都自己写代码了,C++标准库有好多好多的东西,直接用就好

#include <iostream>
#include <string>
#include <regex>
#include <algorithm>

using std::cin, std::cout, std::endl;
using std::string, std::getline;
using std::regex, std::sregex_token_iterator;
using std::for_each, std::stoi;

int main() {
    string line;
    while(getline(cin, line)) {
      regex reg("[+-]?*|0");
      int sum = 0;
      for_each(sregex_token_iterator(line.begin(), line.end(), reg), sregex_token_iterator(),
                [&sum](const string &str) {sum += stoi(str);});
      cout << sum << endl;
    }
    return 0;
}

marvin660 发表于 2022-8-14 22:05:31

月末 发表于 2022-3-6 16:14
#include
#include
int main()


你好能问下为啥要ungetc这个函数吗?(没接触过)

页: [1]
查看完整版本: c++课后作业