当我在函数中调用函数时,它会跳过代码并终止程序?

Posted

技术标签:

【中文标题】当我在函数中调用函数时,它会跳过代码并终止程序?【英文标题】:When I call a function within a function it skips code and terminates program? 【发布时间】:2015-10-01 19:42:22 【问题描述】:

这是一个大项目。我剥离了不必要的代码。我只留下了一个关键功能

当我在任何函数中调用ss(); 时,该函数将控制权交还给main(),而不接受字符串。 如果我不使用函数来接受字符串,则代码有效。我找不到任何问题。

#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void ss();
void casechange();
using namespace std;
char str[100];
int main ()
int choice;

cout<<"Make a choice"<<endl; 
cout<<"Press 1 to change the case of alphabets"<<endl;
cout<<"Press 2 to count number of vowels"<<endl;
cout<<"Press 3 to check if entered string is a palindrome or not"<<endl;
cout<<"Press 4 to reverse a string"<<endl;
cout<<"Press 5 to count number of words"<<endl;
cin>>choice;
switch(choice)
case 1: casechange();
    break; 
case 2: vowelcount();
        break;
case 3:pal();
    break;
case 4: rev();
    break;
case 5: wordcount();
    break;
default: cout<<"Wrong choice"<<endl;
 
 return 0;

void casechange()
ss();
for(int i=0;str[i]!='\0';i++)
 
 if(isupper(str[i]))
 str[i]=tolower(str[i]);
 else str[i]=toupper(str[i]);
 
 puts(str);

void ss()

cout<<"Enter a string"<<endl;
 gets(str);

附言我正在使用代码块。我猜是 gcc 编译器。

【问题讨论】:

(1) 您将 C 标准 I/O 与 C++ 标准流混合在一起。它有效,但它的风格很糟糕。 (2) 你使用的是 C gets();如果我负责你的代码,那将是一个瞬间的失败。这是一个致命的功能,不能在任何代码中安全使用。您可能会暂时摆脱它,但不会永远。 (3) 您的问题几乎可以肯定是第一个输入在输入缓冲区中留下了换行符,ss() 中的gets() 调用读取了该换行符并完成。很多题都是同一个基本问题。 您目前正在混合 C++ 风格的输入 (cin) 和 C 风格的输入 (gets)。我敢打赌这就是这里的问题。我的建议是切换到仅使用 C++ 样式的输入。然后,从使用原始字符数组切换到使用std::string,这样更易​​于使用且不易出错。 另外,请学习如何创建 MCVE (How to create a Minimal, Complete, and Verifiable Example?)。您已经完成了相当不错的工作,但是您可以消除 casechange() 以外的选项,以使其 (a) 更精简和 (b) 独立,以便可以编译和测试。 (另请参阅:SSCCE (Short, Self-Contained, Correct Example) — 与 MCVE 类似。) @JonathanLeffler 谢谢我是新来的。我会记住这一点。 【参考方案1】:

您要求用户做出选择。用户输入了一个数字 enter。然后你读一个字符。 enter 仍然坐在缓冲区中。当涉及到gets 时,它会将其读取为空字符串。

另外请关注所有关于IO、gets等的cmets。

【讨论】:

以上是关于当我在函数中调用函数时,它会跳过代码并终止程序?的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS:为啥会跳过函数?

Unity:如何暂停执行直到函数终止,以便不跳过任何帧

Python:在while循环中无法调用函数

解析 afterSave 函数被跳过

如果定义了构造函数,py.test 会跳过测试类

函数体调用C ++末尾的奇怪循环