在我编写的代码中,我接受一个字符串,检查它是否只包含十进制数字,然后将字符串转换为int。但是,在我的代码中,atoi
返回0,而不是int
的字符串。有人能告诉我我搞砸了吗?
while (!sucess || 0 == Entries){
delete [] bufferptr;
buffer = nullptr;
buffer = new char [MAX];
bufferptr = buffer;
cin.getline(buffer, MAX, '\n');
while (*buffer){
if (isdigit(*buffer++)){
success = true;
} else {
success = false;
break;
}
}
if (success){
numEntries = atoi(buffer);
cout << endl << numEntries << endl;
}
}
答案 0 :(得分:4)
请注意,使用isdigit(*buffer++)
时,您首先调用值为isdigit
的{{1}},然后将指针递增1。
*buffer
使用此行,您已经在数字后的字符处。
所以你应该在你没有成功时增加,并在你成功时休息。
...正如评论建议的那样,尝试自己做一些调试。您的错误并不是很难调试,即使有一些if (isdigit(*buffer++))
并且没有调试器也是如此(尝试在循环中插入cout
。
答案 1 :(得分:1)
您可以使用提取运算符直接将流内容解析为int
:
std::cin >> numEntries;
要进行错误检查,请阅读http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt2。