使用 std、vector 和 bitvec C++代码中的错误以及如何从用户那里获取输入
errors in C++ code using std, vector and bitvec and how to take input from user
我在这里发布了一个问题堆栈溢出并得到了这段代码,我还有一些关于代码的问题,所以 iv 为此提出了一个单独的问题,因为问题不同。
以下代码给我的错误如下(由注释指示):
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
#include <vector>
int main() {
string s;
int i;
int j;
//how to take string s as input from user and feed it to the code?
std::vector<uint16_t> bitvec;
unsigned char* cp = s.c_str()+1;
while (*cp) {
uint16_t bits = *(cp-1)>>8 + *(cp); // error1
bitvec.push_back(bits);
}
uint32_t sum=0;
for(std::vector<int16_t>::iterator j=bitvec.begin();j!=bitvec.end();++j) { //error2
sum += *j;
uint16_t overflow = sum>>16; //capture the overflow bit, move it back to lsb
sum &= (1<<16)-1; //clear the overflow
sum += overflow; //add it back as lsb
}
//how can i see output of final sum+
//error1: std::vector bitvec;//i 收到错误"uint16_t未在范围内声明"和"tempelate 参数无效"对于此行
//error2:在 j 之前声明中的有效类型(这是什么意思)
PROBLEM1:如何从用户那里获取字符串 s 的输入?为什么我不能使用 cout <<"输入字符串",然后使用 getline(cin,s)?同样,我如何查看输出?我可以使用库特吗<<p>PROBLEM2:我是否错过了代码可能需要的任何标头?
uint16_t通常在Linux上#include <stdint.h>
中定义。 您需要包含此头文件。
编译器找不到您正在使用的类型,因为您尚未包含定义它们的正确头文件。
试试这个:
#include <cstdint> //uint16_t and similar defined in here
std::vector<std::uint16_t> bitvec;
unsigned char* cp = s.c_str()+1;
while (*cp) {
std::uint16_t bits = *(cp-1)>>8 + *(cp); // error1
bitvec.push_back(bits);
}
请注意,#include <cstdint>
不会将这些类型拉入全局命名空间(这就是为什么它比#include<stdint.h>
更受欢迎,我认为这就是 stdint.h 现在贬值的原因),但这意味着您必须std::
放在每种类型的前面。或者,您可以使用 using 语句将它们纳入范围,例如 using std::uint16_t
.您的代码中有一个using namespace std
,因此这将自动为您执行此操作。
另外,我认为如果您像这样使用auto,您会发现迭代器代码会更好:
for(auto j = bitvec.begin(); j != bitvec.end(); ++j) {
sum += *j;
std::uint16_t overflow = sum>>16; //capture the overflow bit, move it back to lsb
sum &= (1<<16)-1; //clear the overflow
sum += overflow; //add it back as lsb
}
相关文章:
- C++如何通过用户输入删除列表元素
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- C ++奇怪的数组由用户输入
- 如何允许大写和小写用户输入?
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 如何使用用户输入变量制作二维数组?
- 用户输入字符串的文件附加问题..C++
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?