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;
} 刚才没有注意题目,不小心写了 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 #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;
}
这是第二个,也有问题 我看出来的问题就是你的定义类型不对吧,sum+=ch,整形加字符型 #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;
} 月末 发表于 2022-3-6 16:10
我看出来的问题就是你的定义类型不对吧,sum+=ch,整形加字符型
谢谢你! 傻眼貓咪 发表于 2022-3-6 15:52
刚才没有注意题目,不小心写了 C 代码
CC++输入/输出:
你好,当输入空格时scanf并不会返回1,为什么还会进入while呢? 傻眼貓咪 发表于 2022-3-6 15:52
刚才没有注意题目,不小心写了 C 代码
CC++输入/输出:
另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶 waixiong 发表于 2022-3-7 14:55
你好,当输入空格时scanf并不会返回1,为什么还会进入while呢?
因为 scanf() 返回值是成功读取到的数据个数。 waixiong 发表于 2022-3-7 15:27
另外你的代码如果是以空格结尾, 那并不会返回 求和的值耶
好的,我再研究研究一下。因为我以为题目是以空格为整数分割{:10_250:} 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;
} {:5_95:} 用正则表达式把每一个数字都提取出来,然后求和,就是这样
都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;
}
月末 发表于 2022-3-6 16:14
#include
#include
int main()
你好能问下为啥要ungetc这个函数吗?(没接触过)
页:
[1]