Em suma: ArgC = Total de argumentos; ArgV = "Valor" dos argumentos
[/quote]
3ª Dúvida
Pra que serve o getch, gets, puts...?
São funções diferentes:
Getch() é uma função da ConIO (Windows) que pega o caractere digitado sem ter que apertar enter e não aparece na tela. GetS vem de "Get String", e faz o que o nome sugere: Pega Frase. O utilizo dela não é recomendado pois pode ocorrer overflow de memória e BUMMMM.
Segue um exemplo de como usar uma espécie de gets, mas de uma forma segura:
#include <stdio.h>
int main(int argc, char *argv[]){
char frase[10];
printf("Digite uma frase : ");
fgets(frase,10,stdin);
puts("\nVocê digitou : ");
puts(frase);
return 0;
}
[/quote]
Onde: fgets(frase = o array,10 = a largura do array, stdin = entrada padrao);
Já aproveito e mostro como utilizar o PutS (Colocar Frase; Put String).
Nota: Com ele não é possível utilizar variáveis! Apenas Frases!
Espero ter ajudado
[]'s
T+
EDIT: Corrigido pequenos erros!
3. Re: Dúvidas em C
Gabrielzusa Arch Linux
Post recolhido
Enviado em 08/05/2015 - 18:45h
Thihup escreveu:
1ª Dúvida
#include <stdio.h>
#include <stdlib.h>
int main(void){
printf("Hello VOL World!");
}
Sempre utilizei o "int main()", ou seja, sem parâmetros. Mas, por que em vários sites utilizam como parâmetro o "void"?
Em C, significa que pode receber qualquer argumento, com o void, já não.
Já em C++, ele pode assumir que sem argumentos seja void.
2ª Dúvida
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
printf("Hello VOL World!");
}
Por que aqui usei int argc, char *argv[]?
Significa que irá receber argumentos passados ao executar o "executavel", por exemplo:
#include <stdio.h>
int main(int argc, char *argv[]){
printf("Argumentos Recebidos : \n");
int i;
for(i = 0;i<argc;i++){
printf("%s\n",argv);
}
return 0;
}
Se salvar como, por exemplo, [i]teste.c e executar assim : ./teste argumento1 argumento2 argumento 3; terá essa saida:
./teste
argumento1
argumento2
argumento
3
Em suma: ArgC = Total de argumentos; ArgV = "Valor" dos argumentos
3ª Dúvida
Pra que serve o getch, gets, puts...?
São funções diferentes:
Getch() é uma função da ConIO (Windows) que pega o caractere digitado sem ter que apertar enter e não aparece na tela. GetS vem de "Get String", e faz o que o nome sujere: Pega Frase. O utilizo dela não é recomendado pois pode ocorrer overflow de memória e BUMMMM.
Segue um exemplo de como usar uma espécie de gets, mas de uma forma segura:
#include <stdio.h>
int main(int argc, char *argv[]){
char frase[10];
printf("Digite uma frase : ");
fgets(frase,10,stdin);
puts("\nVocê digitou : ");
puts(frase);
return 0;
}
Onde: fgets(frase = o array,10 = a largura do array, stdin = entrada padrao);
Já aproveito e mostro como utilizar o PutS (Colocar Frase; Put String).
Nota: Com ele não é possível utilizar variaveis! Apenas Frases!
Espero ter ajudado
[]'s
T+[/quote]
Uau! Agora já sei porque usam esses "puts" e "gets"... existem mais "variantes"? Ainda não entendi a 1ª e 2ª dúvida :(
4. Re: Dúvidas em C
Thihupusa Manjaro Linux
Post recolhido
Enviado em 08/05/2015 - 18:51h
Sim, existem vários variantes.
Com a relação a dúvida, poderia me "explicar" o que não entendeu? Acho que com a minha explicação já estava clara ):
Me adicione no Skype : thihup
Espero ter ajudado
[]'s
T+
5. Re: Dúvidas em C
Gabrielzusa Arch Linux
Post recolhido
Enviado em 08/05/2015 - 19:08h
Thihup escreveu:
Sim, existem vários variantes.
Com a relação a dúvida, poderia me "explicar" o que não entendeu? Acho que com a minha explicação já estava clara ):
Me adicione no Skype : thihup
Espero ter ajudado
[]'s
T+
Não tenho Skype. É uma brincadeira ver o que a Microsoft faz com o Linux...
A respeito da minha dúvida, achei confusa sua explicação. Tem como dar uma explicação "alá faculdade"? -q
6. Re: Dúvidas em C
Thihupusa Manjaro Linux
Post recolhido
Enviado em 08/05/2015 - 19:18h
Gabrielz escreveu:
Thihup escreveu:
Sim, existem vários variantes.
Com a relação a dúvida, poderia me "explicar" o que não entendeu? Acho que com a minha explicação já estava clara ):
Me adicione no Skype : thihup
Espero ter ajudado
[]'s
T+
Não tenho Skype. É uma brincadeira ver o que a Microsoft faz com o Linux...
A respeito da minha dúvida, achei confusa sua explicação. Tem como dar uma explicação "alá faculdade"? -q
Hum... "Alá faculdade" complica pois nunca fui pra uma (ainda); Só tenho 14 anos!
Deixe-me ver ...
O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele é, no mínimo 1, pois o nome do programa é contado como sendo o primeiro argumento.
O argv (argument values) é um ponteiro para uma matriz de strings. Cada string desta matriz é um dos parâmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que, como já foi dito, é considerado o primeiro argumento). É para saber quantos elementos temos em argv que temos argc.
Eu recomendo utilizar o argc e argv apenas se tiver alguma utilidade no programa, por exemplo, se precisar passar um numero pela linha de comando, fariamos algo assim:
#include <stdio.h>
int main(int argc, char *argv[]){
printf("O Programa possui %d argumentos!\n",argc);
if(argc != 2 ){
printf("Digite : [nomeDoPrograma] [numeroX]\n");
return 1;
}
printf("O numero digitado foi %s\n",argv[1]);
return 0;
}
Já do void, posso explicar algo assim :
int foo(){}// Exemplo
foo(50);// Permitido, pois não dizemos que não pode passar argumentos
// Porem
int foo(void){}
foo(59); // Não Permitido, pois está explicito que não recebe argumentos
Acontece a mesma coisa com o Main!
Espero que tenha ficado claro!
Qualquer dúvida só postar aqui.
Espero ter ajudado
[]'s
T+
7. Re: Dúvidas em C
Thihupusa Manjaro Linux
Post recolhido
Enviado em 08/05/2015 - 21:59h
Resolvido !? Marque o tópico como Resolvido e clique em Melhor Resposta !
Espero ter ajudado
[]'s
T+
8. ..
gbassanirusa Debian
Post recolhido
Enviado em 09/05/2015 - 00:42h
Boa noite,
Está com duvida ou precisa de uma explicação mais especifica ou mais detalhada?
Att,
9. Re: Dúvidas em C
Thihupusa Manjaro Linux
Post recolhido
Enviado em 15/06/2015 - 12:41h
Resolvido?
Se sim, clique em resolvido e depois em melhor resposta.
Já que você desencavou esse, deixe-me fazer uns comentários.
Thihup escreveu:
Gabrielz escreveu:
Não tenho Skype. É uma brincadeira ver o que a Microsoft faz com o Linux...
A respeito da minha dúvida, achei confusa sua explicação. Tem como dar uma explicação "alá faculdade"? -q
Hum... "Alá faculdade" complica pois nunca fui pra uma (ainda); Só tenho 14 anos!
Na verdade, a coisa é um pouco pior que isso. O autor da pergunta queria que alguém fizesse o trabalho de faculdade dele -- uma coisa que eu considero repugnante, e que em geral a comunidade não recebe muito bem.
Deixe-me ver ...
O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele é, no mínimo 1, pois o nome do programa é contado como sendo o primeiro argumento.
Falso. A única garantia sobre o valor de argc é que ele não será negativo. De fato, você mesmo pode conseguir que ele seja zero. O código abaixo, que funciona em sistemas UNIX-like, faz isso.
O argv (argument values) é um ponteiro para uma matriz de strings. Cada string desta matriz é um dos parâmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que, como já foi dito, é considerado o primeiro argumento). É para saber quantos elementos temos em argv que temos argc.
Quase tudo OK aqui. A ressalva é que argc pode ser nulo e, nesse caso, argv[0] não contém o nome do programa.
Existe ainda um outro caso excepcional; mas previsto no padrão e possível: se o nome do programa não puder ser determinado, mas argc for maior do que zero, argv[0] aponta para uma string vazia (i.e. argv[0][0]==0). Isso seria possível de conseguir com o seguinte código, por exemplo.
/*
Chamo um programa que soma dois inteiros, mas não informo
ao programa seu próprio nome através do vetor de argumentos.
*/
char *some_argv[]={"", "1", "2", NULL};
execv("/caminho/do/somador", some_argv);
No entanto, a forma usual -- e mais educada -- de fazer seria mesmo informando o nome, de uma das formas abaixo (sendo que a segunda ainda é melhor que a primeira).
char progname[]="/caminho/do/programa";
char *some_argv[N_ARGS+2];
/*
Poderia tamber ser **some_argv, e depois
“some_argv=malloc((N_ARGS+2)*sizeof *some_argv)“
*/
/*
Igual ao código acima, trocando apenas a atribuição de some_argv[0],
de modo a eliminar a informação de caminho, deixando apenas o nome
do programa.
*/
char *p=strrchr(progname, '/'); /* No Windows seria '\\' em lugar de '/'. */
some_argv[0]=(p? p+1: progname);
11. Re: Dúvidas em C
Thihupusa Manjaro Linux
Post recolhido
Enviado em 16/06/2015 - 12:28h
paulo1205 escreveu:
Caro Thiago,
Já que você desencavou esse, deixe-me fazer uns comentários.
Thihup escreveu:
Gabrielz escreveu:
Não tenho Skype. É uma brincadeira ver o que a Microsoft faz com o Linux...
A respeito da minha dúvida, achei confusa sua explicação. Tem como dar uma explicação "alá faculdade"? -q
Hum... "Alá faculdade" complica pois nunca fui pra uma (ainda); Só tenho 14 anos!
Na verdade, a coisa é um pouco pior que isso. O autor da pergunta queria que alguém fizesse o trabalho de faculdade dele -- uma coisa que eu considero repugnante, e que em geral a comunidade não recebe muito bem.
Deixe-me ver ...
O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele é, no mínimo 1, pois o nome do programa é contado como sendo o primeiro argumento.
Falso. A única garantia sobre o valor de argc é que ele não será negativo. De fato, você mesmo pode conseguir que ele seja zero. O código abaixo, que funciona em sistemas UNIX-like, faz isso.
O argv (argument values) é um ponteiro para uma matriz de strings. Cada string desta matriz é um dos parâmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que, como já foi dito, é considerado o primeiro argumento). É para saber quantos elementos temos em argv que temos argc.
Quase tudo OK aqui. A ressalva é que argc pode ser nulo e, nesse caso, argv[0] não contém o nome do programa.
Existe ainda um outro caso excepcional; mas previsto no padrão e possível: se o nome do programa não puder ser determinado, mas argc for maior do que zero, argv[0] aponta para uma string vazia (i.e. argv[0][0]==0). Isso seria possível de conseguir com o seguinte código, por exemplo.
/*
Chamo um programa que soma dois inteiros, mas não informo
ao programa seu próprio nome através do vetor de argumentos.
*/
char *some_argv[]={"", "1", "2", NULL};
execv("/caminho/do/somador", some_argv);
No entanto, a forma usual -- e mais educada -- de fazer seria mesmo informando o nome, de uma das formas abaixo (sendo que a segunda ainda é melhor que a primeira).
char progname[]="/caminho/do/programa";
char *some_argv[N_ARGS+2];
/*
Poderia tamber ser **some_argv, e depois
“some_argv=malloc((N_ARGS+2)*sizeof *some_argv)“
*/
/*
Igual ao código acima, trocando apenas a atribuição de some_argv[0],
de modo a eliminar a informação de caminho, deixando apenas o nome
do programa.
*/
char *p=strrchr(progname, '/'); /* No Windows seria '\\' em lugar de '/'. */
some_argv[0]=(p? p+1: progname);