Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果在开关情况下不匹配,为什么此函数返回ASCII值?_C++_Switch Statement - Fatal编程技术网

C++ 如果在开关情况下不匹配,为什么此函数返回ASCII值?

C++ 如果在开关情况下不匹配,为什么此函数返回ASCII值?,c++,switch-statement,C++,Switch Statement,这个程序打印97 **如果没有任何开关大小写匹配,它将输出ASCII值。 如果所有情况都不匹配,为什么函数会返回ASCII值**您的程序行为未定义:对于任何返回int而非main的函数,您必须有一个明确的返回值 你所观察到的似乎是堆栈的损坏;97是作为函数参数传递的小写字母a的ASCII值。这里是UB。foo函数获取一个它不处理的输入,因为您的案例都不支持输入“a”。如果我试着在你的具体案例中解释这个UB,那么可能会发生的事情是,foo返回它被转换为int的输入,这意味着cout Undefin

这个程序打印97

**如果没有任何开关大小写匹配,它将输出ASCII值。 如果所有情况都不匹配,为什么函数会返回ASCII值**

您的程序行为未定义:对于任何返回int而非main的函数,您必须有一个明确的返回值


你所观察到的似乎是堆栈的损坏;97是作为函数参数传递的小写字母a的ASCII值。

这里是UB。foo函数获取一个它不处理的输入,因为您的案例都不支持输入“a”。如果我试着在你的具体案例中解释这个UB,那么可能会发生的事情是,foo返回它被转换为int的输入,这意味着cout Undefined beahviour。您必须始终返回一个值;如果开关中的所有案例都不匹配,那么从foo返回什么?不从声明要执行的函数返回任何导致未定义行为的内容,这会导致整个程序格式错误和无效;t使return看起来像函数。请启用编译器警告。警告C4715:“foo”:并非所有控制路径都返回value@CIsForCookies不过,我还是坚持我的说法。YMMV.:IAM在DeV C++中运行,运行时没有任何错误,打印output@Kishore:绝对:这是未定义行为的一种可接受的表现形式。现在我知道输出是由于堆栈损坏。但它是否应该在到达非void结尾时返回错误function@Kishore编译器告诉您。C本身没有固有的错误检查。@WeatherVane现在我已经启用了编译器警告。谢谢
int foo(char c)
{
  switch(c)
  {
    case '1':
     return(1);
    case '2':
    return(2);
  } 
}

int main()
{
cout << foo('a');
}
int foo(char c) {
    switch(c) {
        case '1':
          return(1);
        case '2':
          return(2);

        //code to execute if 'c' does not equal the value following any of the cases
        default:
          return(-1);
    } 
}

int main() {
    cout << foo('a');
}
// simple char to int without switch
int foo(char c) {

   /*
   // reject unwanted char 
   if (c=='a') {
       return -1;
   }
   */

   // convert char to int
   return (int)c;
}
int foo(char c)
{
  switch(c)
  {
    case '1':
      return(1);
    case '2':
      return(2);
    default:
      return (-1); // indicates error!!
  } 
}

int main()
{
int tmp = foo('a');
if (tmp != -1)
    cout << tmp;
else
    cout << "bad input";
}