鱼C论坛

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

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

[复制链接]
发表于 2022-3-6 15:51:59 | 显示全部楼层 |阅读模式
10鱼币
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的“Enter”键时,数据输入结束。程序自动对所有的整数进行求和并打印出结果。

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

  3. int main()
  4. {
  5.         char ch;
  6.         int sum=0;
  7.         while(1)
  8.         {       
  9.                 ch=getchar();
  10.                
  11.                 if(ch=='\n')
  12.                         break;
  13.                 else if(ch==' ')
  14.                         ;
  15.                 else
  16.                         sum+=ch;       
  17.         }
  18.         cout << sum << endl;
  19.         return 0;
  20. }
复制代码
最佳答案
2022-3-6 15:52:00
刚才没有注意题目,不小心写了 C 代码
C
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>

  3. int main()
  4. {
  5.     int num, sum = 0;
  6.        
  7.         while (scanf("%d", &num))
  8.         {
  9.                 sum += num;
  10.                 char c = getchar();
  11.                 if (c == '\n') break;
  12.         }
  13.         printf("%d", sum);
  14.         return 0;
  15. }
复制代码
C++
  1. #include <iostream>

  2. int main() {
  3.         int num, sum = 0;
  4.         while (true)
  5.         {
  6.                 std::cin >> num;
  7.                 sum += num;
  8.                 char c = getchar();
  9.                 if (c == '\n')break;
  10.         }
  11.         std::cout << sum << std::endl;
  12.         return 0;
  13. }
复制代码
输入/输出:
  1. 75 81          56      14       6 7    31   44    52
  2. 366
复制代码

最佳答案

查看完整内容

刚才没有注意题目,不小心写了 C 代码 CC++输入/输出:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-6 15:52:00 | 显示全部楼层    本楼为最佳答案   
刚才没有注意题目,不小心写了 C 代码
C
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>

  3. int main()
  4. {
  5.     int num, sum = 0;
  6.        
  7.         while (scanf("%d", &num))
  8.         {
  9.                 sum += num;
  10.                 char c = getchar();
  11.                 if (c == '\n') break;
  12.         }
  13.         printf("%d", sum);
  14.         return 0;
  15. }
复制代码
C++
  1. #include <iostream>

  2. int main() {
  3.         int num, sum = 0;
  4.         while (true)
  5.         {
  6.                 std::cin >> num;
  7.                 sum += num;
  8.                 char c = getchar();
  9.                 if (c == '\n')break;
  10.         }
  11.         std::cout << sum << std::endl;
  12.         return 0;
  13. }
复制代码
输入/输出:
  1. 75 81          56      14       6 7    31   44    52
  2. 366
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-6 15:53:12 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.         char ch;
  6.         int sum=0;
  7.         cout << "请输入整数或者空格,输入ENTER结束此程序:"<< endl;
  8.         while(ch=getchar()!= '\n')
  9.         {
  10.                 if(ch==' ')
  11.                         break;
  12.                 else
  13.                 sum+=ch;
  14.         }
  15.         cout << "结果是:"<< sum;
  16.         return 0;
  17. }
复制代码


这是第二个,也有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-6 16:10:44 | 显示全部楼层
我看出来的问题就是你的定义类型不对吧,sum+=ch,整形加字符型
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

谢谢你!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

你好,当输入空格时scanf并不会返回1,为什么还会进入while呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

因为 scanf() 返回值是成功读取到的数据个数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

好的,我再研究研究一下。因为我以为题目是以空格为整数分割
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  2. int main() {
  3.         int num, sum = 0;
  4.         while (true){
  5.                 std::cin >> num;
  6.                 if(std::cin.eof()) break;
  7.                 sum += num;
  8.         }
  9.         std::cout << sum << std::endl;
  10.         return 0;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 16:11:33 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-7 18:19:29 | 显示全部楼层
用正则表达式把每一个数字都提取出来,然后求和,就是这样
都C++了,就不要什么都自己写代码了,C++标准库有好多好多的东西,直接用就好

  1. #include <iostream>
  2. #include <string>
  3. #include <regex>
  4. #include <algorithm>

  5. using std::cin, std::cout, std::endl;
  6. using std::string, std::getline;
  7. using std::regex, std::sregex_token_iterator;
  8. using std::for_each, std::stoi;

  9. int main() {
  10.     string line;
  11.     while(getline(cin, line)) {
  12.         regex reg("[+-]?[1-9][0-9]*|0");
  13.         int sum = 0;
  14.         for_each(sregex_token_iterator(line.begin(), line.end(), reg), sregex_token_iterator(),
  15.                 [&sum](const string &str) {sum += stoi(str);});
  16.         cout << sum << endl;
  17.     }
  18.     return 0;
  19. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 13:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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