代码
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
class Chkinval
{
char *inval;
char *inarray;
public:
void inPutProcessor();
};
void Chkinval::inPutProcessor()
{
cout << "Input" ;
fgets(inval,1000,stdin);
int tmp = atoi(inval);
for(int lpcnt=0;lpcnt< tmp;lpcnt++)
{
fgets(inarray,1000,stdin);
}
for(int lpcnt=0;lpcnt< tmp;lpcnt++)
{
cout << "The array elements" << inarray[lpcnt];
}
}
int main()
{
Chkinval tmp1 ;
tmp1.inPutProcessor();
return 0;
}
问题:
程序编译正常但控制台没有结果
在调试模式下
我收到错误消息“没有可用的源”msvcrt!fgets()“”
是操作系统问题还是需要安装任何库?
答案 0 :(得分:2)
现在的代码问题是inval
和inarray
都没有被初始化,因此你可以在任意内存位置读取1000个字节。
for(int lpcnt=0;lpcnt< tmp;lpcnt++)
{
fgets(inarray,1000,stdin);
}
可能也不是你想要的(即使inarray
被初始化),因为它会覆盖每次迭代的内容。
fgets(inval,1000,stdin);
int tmp = atoi(inval);
本身没有错,但你可能最好使用fscanf(stdin, "%d", &tmp)
(如果你正在编写C,请继续阅读)。
很多这些问题源于您的代码非常类似于C的事实。没有理由(除非是为家庭作业)在C ++中自己管理那么多的分配。这是一个小例子,展示了更多的C ++ - 做某些事情的方式:
#include <iostream>
#include <vector>
#include <string>
int main()
{
std::cout << "Number of elements to read? " << std::flush;
// How many lines should we read?
int count;
if (!(std::cin >> count) || count <= 0) {
std::cout << "Invalid element count" << std::endl;
return 1;
}
std::string line;
std::vector<std::string> lines;
// Read until EOF (to get newline from above reading)
if (!std::getline(std::cin, line)) {
std::cout << "Error reading line" << std::endl;
return 1;
}
// Read lines one at a time adding them to the 'lines' vector
for (int i = 0; i < count; i++) {
if (!std::getline(std::cin, line)) {
std::cout << "Error reading line" << std::endl;
return 1;
}
lines.push_back(line);
}
// Echo the lines back
for (std::vector<std::string>::const_iterator line_iterator = lines.begin(); line_iterator != lines.end(); ++line_iterator) {
std::cout << *line_iterator << '\n';
}
return 0;
}