C ++传递局部变量

时间:2015-11-01 17:37:11

标签: c++

我无法弄清楚此代码中指针的错误位置。但是,我收到代码没有指针功能的错误。

#include <iostream>
using namespace std;

char uppercase (char ch) {
    if ((ch >= 'a') && (ch <= 'z')) {
        return ch - 'a' + 'A' ;
        cout << "Your capital letter is " << ch << endl;
    } else {
        return ch;
        cout << "Your original letter is: " << ch << endl;
    }
}


int main(int& ch){
    cout << "Please enter a lowercase letter between a to z: ";
    cin >> ch;
    char uppercase;
    char outChar;
    char inChar;
    outChar = uppercase(inChar);
    system("pause");
}

3 个答案:

答案 0 :(得分:4)

  1. int main(char&)严格遵守 。它可能由实现提供,但我不知道任何平台这样做。在托管实施中,请改为使用int main()int main(int argc, char** argv)

  2. 在1 st 注释的基础上,将函数中的ch声明为局部变量并使用char而非int

    char ch;
    

    或完全删除它,如4 th 点所述。

  3. 您在未初始化的变量(uppercase)上调用inChar,导致未定义的行为,因为uppercase从中读取。移除ch变量,然后使用cin上的inChar代替。

  4. 您可能应该在return ch;函数中使用cout语句交换uppercasecout - 语句是死代码,这意味着它永远不会被执行,因为函数会事先返回。

答案 1 :(得分:0)

你有一个与函数名相同的局部变量:uppercase 摆脱局部变量 还将主要功能修复为以下签名。

int main(int argc, char *argv[])
{
....
}

ex:

#include <iostream>
using namespace std;

char uppercase (char ch) {
  if ((ch >= 'a') && (ch <= 'z')) {
     return ch - 'a' + 'A' ;
  }
  else {
     return ch;
  }
}


int main(int argc, char* argv[]){
cout << "Please enter a lowercase letter between a to z: ";

char inChar;
cin >> inChar;
char outChar = uppercase(inChar);
return 0;
}

答案 2 :(得分:0)

我的代码中可以看到很多问题:

  1. 阅读Why System is evil。简而言之,使用系统(“暂停”)往往会有问题。还有许多其他方法可以阻止你的代码(例如另一个cin)。
  2. 正如上述评论之一所述,打开主程序的一般方法是使用int main()或int main(int argc,char ** argv)。
  3. 假设您的代码正常工作......然后您要求输入“ch”,然后在程序的运行时再次询问相同的输入,然后再次更改!我提出你使用第2点和@cad说的话。
  4. 你问题的真正答案!您正在使用大写(char)输入尚未填充“InChar”的变量,但是您通过用户输入填充的字符是“ch”。
  5. 希望这有帮助。