Код C ++ остановлен из-за ошибки при использовании cout внутри функции - PullRequest
0 голосов
/ 30 января 2020

Мой код не работает, когда я использую cout внутри функции, но если я возвращаю значение и поток внутри основной функции, он работает. Мой код, который не работает, это

#include <iostream>
#include <cstring>
using namespace std;
int add(int a,int b){
  int c = a+b;
  cout<<c<<endl;
}
string add(string m,string n){
  string c = m+" "+n;
  cout<<c<<endl;
}
int main(){
    string x ="amit";
    string y ="kumar";
    add(x,y);//adding string
    add(5,58);//adding numbers
}

Но когда я возвращаю значение, оно отлично работает

#include <iostream>
#include <cstring>
using namespace std;

int add(int a,int b){
  int c = a+b;
  cout<<c<<endl;
}
string add(string m,string n){
  string c = m+" "+n;
  return c;
}
int main(){
    string x ="amit";
    string y ="kumar";
    string z = add(x,y);

    cout<<z<<endl;
    add(5,58);//adding numbers
}

Я использую кодовые блоки для моего программирования. Почему это резкое поведение. Что я тут не так делаю.

1 Ответ

4 голосов
/ 30 января 2020

Обе ваши программы имеют неопределенное поведение .

string add(string m,string n) и int add(int a,int b) объявили non-void возвращаемые типы. Но функции текут до конца без оператора return, который возвращает что-либо. Это приводит к неопределенному поведению.

Если вы добавите правильный оператор возврата или измените объявленный тип возврата на void, он будет работать, как и ожидалось, в обеих программах.

Если вы этого еще не сделали, включить дополнительные предупреждения в вашем компиляторе. Он должен был предупредить вас об этой проблеме. Если он предупреждал вас, пожалуйста, никогда не игнорируйте предупреждения. Исправьте их все.


Также обратите внимание, что вам нужно #include<string>, а не #include<cstring>, чтобы использовать std::string.

...