我的代码中有char的问题,请指导我(c ++)

时间:2011-02-02 07:26:16

标签: c++

我的代码中有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");
}

7 个答案:

答案 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不会为您的输入分配所需的内存
  • C ++有一个std::string类可以解决上述许多问题,而且似乎在这里使用是正确的

我希望你不会觉得被冒犯,但对我来说,看起来你正在使用C ++作为学习编程的第一语言。我个人认为这是一场灾难。

如果由于某种奇怪的原因你真的必须使用这条困难的道路,那么我的建议是从good introductory book开始,首先是以下例子。

C ++不仅仅是“试着看”的好语言。 IMO键入代码并尝试编译通常很糟糕,但是它是一个真正的自杀,语言功能强大但复杂且不对称,因为它是C ++,特别是如果你认为当你犯错误时C ++只会laugh at you而不是清除告诉你哪里是错误。