我的代码中有char的问题,请指导我(c ++)。
我有这个错误:Run-Time Check Failure #3 - The variable 'op' is being used without being initialized
。它是什么意思,我该如何解决?
这是我的代码:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
using namespace std;
enum Operations {SIN1, COS1, TAN1};
void selectenteroperation(char *szInput) {
char *szLabels[3] = {"sin", "cos", "tan"};
int i=0;
while(strcmp(szInput,szLabels[i])==0)
++i;
switch (i)
{
case SIN1: { cout<<"SIN"; break; }
case COS1: { cout<<"COS"; break; }
case TAN1: { cout<<"TAN"; break; }
default: { cout<<"Wrong"; break; }
}
}
void main() {
char *op;
cout<<"op?";
cin>>op;
if(strcmp(op,"sin")==0) selectenteroperation("sin");
if(strcmp(op,"cos")==0) selectenteroperation("cos");
if(strcmp(op,"tan")==0) selectenteroperation("tan");
}
答案 0 :(得分:5)
这是因为char *op
只创建一个字符指针,不支持字符串的后备存储。
由于这是C ++,您应该使用std::string
。旧式C字符串有其用途,但易于使用的字符串不是其中之一。
拥抱C ++,有足够多的C程序员试图将自己作为C ++专家传递给自己: - )
由于这看起来像家庭作业,我不会给你你完全固定的程序,但我 会给你一个可以用作测试基础的程序,更重要的是,理解:< / p>
pax$ cat qq.cpp ; g++ -o qq qq.cpp
#include <iostream>
int main (void) {
std::string s;
std::cout << "Enter something: ";
std::cin >> s; // or getline (std::cin, s).
std::cout << "You entered [" << s << "]" << std::endl;
return 0;
}
pax$ ./qq
Enter something: hello
You entered [hello]
或者,如果确实想要使用C字符串,例如:
#include <iostream>
int main (void) {
char s[256];
std::cout << "Enter something: ";
std::cin.getline (s, sizeof (s));
std::cout << "You entered [" << s << "]" << std::endl;
return 0;
}
可能合适。
答案 1 :(得分:2)
我认为您应该检查标准模板库string class,而不是使用C字符串(char *)作为op变量。
答案 2 :(得分:2)
我猜你可能想换行:
while(strcmp(szInput,szLabels[i])==0)
到
while(strcmp(szInput,szLabels[i])!=0)
编辑:但你也应该在这里进行测试,以确保我不超过2。
当然,您还需要为* op分配内存,如下所示:
char *op = new char[256] ;
(我在这里任意选择了256)。
更新:测试我是否小于3:
while(i<3 && strcmp(szInput,szLabels[i])!=0)
答案 3 :(得分:1)
您正在阅读未经宣传的char*
指针。一个快速(如果有点危险的修复)将写:
char op[100];
而不是
char* op;
但是使用std :: strings比其他人指出的要安全得多。
答案 4 :(得分:0)
答案是你没有char - 你有一个指向char的指针。指针未初始化。
char *op;
cout<<"op?";
cin>>op;
执行类似
的操作char *op = new char[100];
或者改用std :: string。
答案 5 :(得分:0)
char *op; cout>op;
上面的代码错了。试着写一些尚未初始化的内存!!
尝试使用char数组或字符串而不是原始字符指针
答案 6 :(得分:0)
您的代码存在许多问题:
strcmp
在字符串为EQUAL时返回0
,而不是在它们不同时返回szLabels
const char *
main
不应该这样声明(它不是void
函数)cin >> op
不会为您的输入分配所需的内存std::string
类可以解决上述许多问题,而且似乎在这里使用是正确的我希望你不会觉得被冒犯,但对我来说,看起来你正在使用C ++作为学习编程的第一语言。我个人认为这是一场灾难。
如果由于某种奇怪的原因你真的必须使用这条困难的道路,那么我的建议是从good introductory book开始,首先是以下例子。
C ++不仅仅是“试着看”的好语言。 IMO键入代码并尝试编译通常很糟糕,但是它是一个真正的自杀,语言功能强大但复杂且不对称,因为它是C ++,特别是如果你认为当你犯错误时C ++只会laugh at you而不是清除告诉你哪里是错误。