2 条题解
-
0
/* 思路分析 思路一 (error) : 1.用一个变量循环接收并累加数字,遇到\0时输出并重置 ---num 是int类型 不能用 if ( num == '\n' ) 来判断 学习思路二 : 1.在思路一基础上进行改进, 2.将引入cin.fail() cin.clear() cin.ignore(); --- 还是有小问题,输出的结果不对 --- 不过用新的窥视函数cin.peek()函数 完美解决 --- 遗憾的是测试结果没问题,但测评一个都过不了 学习思路三: 1. 关键用法 stringstream 用来分割字符串 空格为间隔 2. getline() 获取每一行 cin.ignore() 去掉每一行的换行符 3. ss >> num ==> 从分割出来的ss字符流中提取数字 #include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; cin.ignore(); int num; for ( int i = 1; i <= n; i++ ) { int sum = 0; for ( int j = 1; j <= 20; j++ ) { //cin.peek() 窥视函数666 if ( cin.peek() == '\n' || cin.peek() == EOF) { cin.ignore(); //去除\n换行符 break; } if ( cin >> num ) { //如果成功输入一个数字 sum += num; } else { // 代表输入错误 //清除错误 cin.clear(); //清除当前行剩余内容 cin.ignore(); break; } } cout << sum << endl; } return 0; } */ #include <bits/stdc++.h> using namespace std; int main() { int n; int num; cin >> n; cin.ignore(); for ( int i = 0; i < n; i++ ) { int sum = 0; string str; getline(cin , str); //string ss = stringstream(str); //stringstream 是一个类,而不是一个字符串类型。 stringstream ss(str); while ( ss >> num ) { sum += num; } cout << sum << endl; } return 0; }
- 1
信息
- ID
- 63
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 613
- 已通过
- 166
- 上传者