Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida Saída Programa - Argc , Argv


MicheL Vilela

Pergunta

Olá comunidade, estou com um programa pronto aqui em C mas estou com dúvida.

Queria que esse programa, ao ser executado pela linha de comando fizesse como um exemplo que tenho aqui. Digitando o nome do programa no DOS da seguinte forma; C:\PROGRAMA 5 - ONDE 5 é o tamanho da tabuleiro...dou enter ele me retorna o resultado. No meu programa ao digitar isso ele aparece a mensagem: Entre com o tamanho do tabuleiro. Queria omitir essa mensagem como no exemplo. Sei que uso argc e argv, mas onde uso eles no código. Se puder me dar mais essa ajuda.

Valeu pela força!

Abração!!

Código completo:

#include <stdio.h>

#include <conio.h>

int n; //tamanho do tabuleiro

struct desloc

{ // Usado para sistemas de pontos,onde há deslocamentos nas direções x e y

int dx;

int dy;

};

// vetor de deslocamentos que define os possíveis

// movimentos do cavalo no tabuleiro de xadrez - maximo de 8 posicoes

desloc mov_cav[8 ]={{ 2, 1},{ 1, 2},{-1, 2},{-2, 1},

{-2,-1},{-1,-2},{ 1,-2},{ 2,-1}};

int **T; // tabuleiro

int nsq; // número de posiçoes no tabuleiro quando n^2

bool tenta_mov(int i, int x, int y) {

int u,v; // posição do próximo movimento

bool que; // quando true => movimento com sucesso

int k;

k=0;

do {

que=false;

u = x+mov_cav[k].dx;

v = y+mov_cav[k].dy;

k=k+1;

// verifica se a posição é válida no tabuleiro

// e se a posição ainda não foi visitada

if (0 <= u && u < n && 0 <= v && v < n &&

T[v ]==0) { //valida se posicoes u/v são menores que tam tabuleiro, se não estao

//preenchidas e se o tabuleiro na posicao u/v não esta ocupada

T[v ]=i; // registra a visita

if (i < nsq) { // i menor que numero de posicoes tabuleiro

// ainda há posições no tabuleiro não visitadas

que = tenta_mov(i+1,u,v);

if (!que) // movimento sem sucesso

T[v ]=0; // remova o registo de "visita"

}

else que=true;

}

} while (!que && k<8);

return que;

}

int main ( int argc, char **argv ) {

bool ok;

printf("Tamanho do tabuleiro = ");

scanf("%d", &n);

nsq = n*n;

// Aloca espaço para o tabuleiro

T= new(int* [n]);

for (int i=0; i < n; i++)

T= new(int[n]);

for (int i=0; i < n; i++)

for (int j=0; j < n; j++)

T[j]=0;

T[0][0]=1; //primeira posicao ocupada

ok= tenta_mov(2,0,0); // andar mais duas - chama funcao, I=2,x=0,z=0

if (ok) {

for (int i=0; i < n; i++) {

for (int j=0; j < n; j++)

printf("%d ", T[j]) ;

printf("\n") ;

getch();

}

}

else

printf("não há solucao!");

getch();

return 0;

}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Boa noite!

Vou tentar lhe explicar.

argc tipo int vai conter o número de argumentos passado quando para o programa você pode utilizalo para consistir os dados de entrada.

argv é um vetor de string contendo os dados de entrada, ele começa na posição 0 que contém do executavel seguido pelos argumentos passados.

Vou colocar um exemplo:

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[]){
  if (argc != 2)
    exit(-1);
  printf("\n Eu sou o executavel %s e foi passado %s como argumento! \n",argv[0],argv[1]);
  system("PAUSE");
}

Editado por nandopc001
Link para o comentário
Compartilhar em outros sites

  • 0

Ok Nando,

Deu pra entender o argc e argv, mas veja se pode me dar mais uma luz.

Acredito que é nessa parte que tenho que acrescentar o código do argc e argv, porém não sei onde nem como fazê-lo.

int main ( int argc, char **argv ) {

bool ok;

printf("Tamanho do tabuleiro = ");

scanf("%d", &n);

nsq = n*n;

// Aloca espaço para o tabuleiro

T= new(int* [n]);

for (int i=0; i < n; i++)

T= new(int[n]);

for (int i=0; i < n; i++)

for (int j=0; j < n; j++)

T[j]=0;

Link para o comentário
Compartilhar em outros sites

  • 0

Isso mesmo,

vai ficar assim.

int main ( int argc, char **argv ) {
bool ok;

/*  printf("Tamanho do tabuleiro = "); *
*   scanf("%d", &n);                          */
n=atoi(argv[1]);
nsq = n*n;

// Aloca espaço para o tabuleiro

T= new(int* [n]);
for (int i=0; i < n; i++)
T[i]= new(int[n]);
for (int i=0; i < n; i++)
for (int j=0; j < n; j++)
T[i][j]=0;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...