鱼C论坛

 找回密码
 立即注册
查看: 2508|回复: 13

[已解决]c++课后作业

[复制链接]
发表于 2022-3-6 15:51:59 | 显示全部楼层 |阅读模式
10鱼币
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的“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

最佳答案

查看完整内容

刚才没有注意题目,不小心写了 C 代码 CC++输入/输出:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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;
}

这是第二个,也有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-6 16:10:44 | 显示全部楼层
我看出来的问题就是你的定义类型不对吧,sum+=ch,整形加字符型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-6 17:11:14 | 显示全部楼层
月末 发表于 2022-3-6 16:10
我看出来的问题就是你的定义类型不对吧,sum+=ch,整形加字符型

谢谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-7 14:55:27 | 显示全部楼层
傻眼貓咪 发表于 2022-3-6 15:52
刚才没有注意题目,不小心写了 C 代码
CC++输入/输出:

你好,当输入空格时scanf并不会返回1,为什么还会进入while呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-7 15:27:40 | 显示全部楼层
傻眼貓咪 发表于 2022-3-6 15:52
刚才没有注意题目,不小心写了 C 代码
CC++输入/输出:

另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 15:53:27 From FishC Mobile | 显示全部楼层
waixiong 发表于 2022-3-7 14:55
你好,当输入空格时scanf并不会返回1,为什么还会进入while呢?

因为 scanf() 返回值是成功读取到的数据个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 15:56:12 From FishC Mobile | 显示全部楼层
waixiong 发表于 2022-3-7 15:27
另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶

好的,我再研究研究一下。因为我以为题目是以空格为整数分割
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 16:02:27 From FishC Mobile | 显示全部楼层
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 16:11:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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("[+-]?[1-9][0-9]*|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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-14 22:05:31 | 显示全部楼层
月末 发表于 2022-3-6 16:14
#include
#include
int main()

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 01:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表