Jump to content
cenorasped

[Resolvido] Dificuldade C para C++

Recommended Posts

cenorasped

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!

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
tiagoagvieira

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);

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
cenorasped

o scanf() retorna a quantidade de valores que foi recebida com sucesso.

Exemplo:

INPUT: 2

return: 1

INPUT: f 3 2

return: 0

INPUT: 2 exemplo 5

return: 3

Share this post


Link to post
Share on other sites
tiagoagvieira

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

Share this post


Link to post
Share on other sites
cenorasped

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."

Share this post


Link to post
Share on other sites
tiagoagvieira

Segundo o que eu sei, o Cin não faz isso,eu vou procurar mais, ou espera a ajuda de outra pessoa, entretanto vou te fazer isto de outra maneira, vai ser é muito mais extenso,peço desculpa não conseguir ajudar mais.

Share this post


Link to post
Share on other sites
tiagoagvieira

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;
   }
 }
}

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
cenorasped
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

Share this post


Link to post
Share on other sites
tiagoagvieira

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

Share this post


Link to post
Share on other sites
mogers

Porque não usar o mesmo código em C++? O scanf está disponível...

  • Vote 1

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Share this post


Link to post
Share on other sites
tiagoagvieira

Porque não usar o mesmo código em C++? O scanf está disponível...

Pois, penso que seja um exercício que ele esteja a tentar fazer

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
cenorasped

Porque não usar o mesmo código em C++? O scanf está disponível...

Porque queria algo que não tivesse ponteiros directamente!

Vou fazer como o HappyHippyHippo sugeriu!

Obrigado a todos!

Edited by cenorasped

Share this post


Link to post
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

×
×
  • 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.