Jump to content

[Resolvido] Dificuldade C para C++


cenorasped
 Share

Recommended Posts

Bom dia!

Alguém pode-me ajudar a fazer o código seguinte em c++?

int num1, num2, soma = 0;
char str[20];
while (soma != 3)
{
 fflush(stdin);
 soma = scanf(" %d %s %d", &num1, str, &num2);
 if (soma == 3)
   printf("Inserio correctamente\n");
 else
   printf("Nao Inserio correctamente\n");
}

Objetivo:

-Receber dados "tipo linha comandos";

-Ver quantidade de palavras.

Obrigado!

Link to comment
Share on other sites

Se não me engano é isto:

Bibliotecas:

#include <iostream>;

int num1, num2, soma = 0;
char str[20];
while (soma != 3)
{
 fflush(stdin);
 soma = cin>>num1, str, num2; // Aqui estás a tentar colocar uma char numa variável int, não o podes fazer
 if (soma == 3)
cout<<"Inserio correctamente"<<endl;
 else
cout<<"Nao Inserio correctamente"<< endl;
}

PS: Esta parte ainda não entendi o que queres, por isso estar mal no meu código

soma = scanf(" %d %s %d", &num1, str, &num2);

Link to comment
Share on other sites

E o scanf() em C faz-te isso? Não sei se o Cin faz isso, vou ver já te digo alguma coisa

Sim!

"On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file."

Link to comment
Share on other sites

Isto funciona, tens é o problema dos chars, se colocares lá um inteiro por exemplo ele vai fazer um ciclo infinito

#include <iostream>

using namespace std;

void main()
{
 int num1(0), num2(0), soma = 0;
 char str;

 cin >> num1 >> str >> num2;
 while (soma != 3)
 {
   fflush(stdin);
   if (0 < num1 < 9999999 && 0 < num2 < 9999999 && str >= 'a' && str <= 'z' && str >= 'A' && str <= 'Z')

   {
     soma = 3; // isto é dispensável, serve só para estar sempre a fazer o while, quando estiver errado
     cout << "Inserio correctamente" << endl;
     system("pause");

   }
   else
   {
     cout << "Nao Inserio correctamente" << endl;
   }
 }
}
Link to comment
Share on other sites

soma = 3; // isto é dispensável, serve só para estar sempre a fazer o while, quando estiver errado

Não pode ser dispensável, porque eu mais "tarde" pretendo saber a quantidade que recebo, seja ela qual for; para que o programa fique dinâmico.

Resultado pretendido:

INPUT: 23 332 22 3

OUTPUT:4 argumentos

OUTPUT:e depois conteúdo de cada argumento

INPUT: 23 332 dfdf

OUTPUT:3 argumentos

OUTPUT:e depois conteúdo de cada argumento

Edited by cenorasped
Link to comment
Share on other sites

Pronto o que podes fazer é guardar o teu input num ficheiro, lês até ao espaço, e depois guardas o que está até ao espaço e guardas num vector em que i será o numero de argumentos, e incrementas o i sempre que chegares ao espaço, e volta até ao próximo espaço e guarda na posição i+1, e sucessivamente, agora o problema que tens é que se for um string não podes guardar num vector de inteiros. Depois apresentas o i e o vector de v[0] até v

Link to comment
Share on other sites

se pretendes fazer com que se comporte exactamente da mesma forma, tens de fazer o trabalho que o scanf faz e o istream não:

#include <iostream>
#include <string>

#include <cstdlib>

int my_read(int * num1, std::string * str, int * num2) {
   std::string buffer;
   char * check = NULL;
   int nread = 0;

   std::cin >> buffer;
   if ((*num1 = strtol(buffer.c_str(), &check, 10) == 0L) && (buffer.c_str() == check))
       return nread;
   nread++;

   std::cin >> *str;
   nread++;

   std::cin >> buffer;
   if ((*num2 = strtol(buffer.c_str(), &check, 10) == 0L) && (buffer.c_str() == check))
       return nread;
   nread++;

   return nread;
}

int main() {
   std::string str;
   int num1 = 0, num2 = 0, nread = 0;

   nread = my_read(&num1, &str, &num2);

   if (nread == 3)
       std::cout << "Inserio correctamente" << std::endl;
   else
       std::cout << "Nao Inserio correctamente" << std::endl;

   return 0;
}
  • Vote 2
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.