Problemas com scanf()? [RESOLVIDO]

1. Problemas com scanf()? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 04/02/2012 - 15:04h

Olá galera este é meu primeiro tópico sobre programação... sou novato no linux e também em C,por isto não me levem a mal se eu não for claro em algum ponto da minha dúvida.

Primeiramente tenho tentado copiar strings com a função scanf() da biblioteca <stdio.h>,sendo que não funciona!!, já as outras funções pertencentes a mesma biblioteca funcionam perfeitamente, como a printf. Na realidade a scanf sim,mas parcialmente, ela só não copia strings,mas inteiros ,doubles etc etc ela faz tudo certinho,estranho não?

Vou postar a seguir um pequeno código que fiz e o erro que prossegue com a execução do mesmo:


#include <stdio.h>

int main(void){

char nome[30];

printf("Digite o seu nome:\n\n");

scanf("%s",&nome); //aqui está o erro...não sei o porque dele, pois em outros SO's funciona perfeitamente este método de copia de string.


printf("O seu nome e: %s ",nome);



}





Ao compilar o código acima com o comando g++ teste.cpp - teste, o terminal acusa o seguinte erro:




teste.cpp: In function ‘int main()’:
teste.cpp:6: warning: format ‘%s’ expects type ‘char*’, but argument 2 has type ‘char (*)[30]’



Não sou esses feras em inglês mas como assim %s espera um ponteiro para char? é isso que entendi,se estiver errado corrigam e me ajudem a resolver este erro, pois sem copia de string fica difícil construir quaisquer programas.

Abraço a todos do VOL, fiquem com Deus.






  


2. MELHOR RESPOSTA

Levi Gomes
levi linux

(usa Arch Linux)

Enviado em 04/02/2012 - 15:28h

Aqui o código rodou tranquilamente, só gostaria de fazer alguma observações.
Para fazer leitura de strings, há métodos mais eficientes que o scanf como a função fgets. Veja link abaixo


http://www.vivaolinux.com.br/dica/Porque-fgets()-ao-inves-de-gets()


Outro detalhe em linux é interessante não utilizar int main(void), pois o retorno de um inteiro (padrão da função main) serve para o linux verificar se um programa foi executado corretamente.

Eu por exemplo colocaria o código assim



# include <stdio.h>
# define tamanho_string 30 // Tamanho da string

int main(){

char nome[tamanho_string];

printf("Digite o seu nome:\n\n");

fgets(nome, tamanho_string, stdin);

printf("O seu nome e: %s ",nome);

return 0; // padrão da função int main
}



Bem o fgets só vai ler os 30 caracteres que você definiu, outra coisa vai ler espaços.

Tenta compilar com o gcc. Pode utilizar o código abaixo


gcc arquivo_source -o nome_de_saida



Qualquer dúvida posta aí, bons estudos.

3. Re: Problemas com scanf()? [RESOLVIDO]

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 04/02/2012 - 15:38h

leitura de string em C seguindo padrão C-ANSI nos sistemas Unix-like.


fgets(string, 80,stdout);


stdin: entrada
80: tamanho da string
string: variável


Outro ponto que é bom ressaltar, se o código for C apenas salve o arquivo em .c e compile com gcc arquivo.c -o arqexe.
Caso seja C++ salve em .cpp e compile com g++ arquivo.cpp -o arqexe.

Exemplo C-ANSI

#include <stdio.h>
int main(int argc,char **argv)
{
char str[80];
printf("Digite uma string: ");
fgets(str, 80, stdin);
printf("A string digitada foi: %s\n", str);
return 0;
}




4. Re: Problemas com scanf()? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 04/02/2012 - 15:39h

Ae caro Levi, muito obrigado cara... eu nem conhecia esta função fgets, e realmente ela funciona perfeitamente!!, deixarei a scanf de lado e irei usa-la em meus projetos,valeu pela ajuda,mas aproveitando economia de tópicos, queria saber quala utilidade desse argumento
stdin 
da função?, pois só entendios dois primeiros ^^. Flws abraço!!


5. Re: Problemas com scanf()? [RESOLVIDO]

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 04/02/2012 - 15:41h

stdin: entrada
stdout: saída


6. Re: Problemas com scanf()? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 04/02/2012 - 15:42h

Opa saitam... cara queria saber se tem problema usar a compilação g++ ao invés de gcc para programas em c? eu sempre salvo meus programas em .cpp, costume xp,mas tem algum mal nisso?


7. Re: Problemas com scanf()? [RESOLVIDO]

Levi Gomes
levi linux

(usa Arch Linux)

Enviado em 04/02/2012 - 15:42h

O parâmetro stidin, lê a partir do dispositivo de entrada padrão, no vaso seu teclado.
Veja o link abaixo:

http://www.vivaolinux.com.br/artigo/Parametros-interessantes-do-scanf-e-do-printf-em-C

Boa sorte!


8. Re: Problemas com scanf()? [RESOLVIDO]

Levi Gomes
levi linux

(usa Arch Linux)

Enviado em 04/02/2012 - 15:56h

victocha escreveu:

Opa saitam... cara queria saber se tem problema usar a compilação g++ ao invés de gcc para programas em c? eu sempre salvo meus programas em .cpp, costume xp,mas tem algum mal nisso?


Para compilar C utilize o gcc e salve o arquivo com a extensão .c.
Veja o link abaixo

http://www.vivaolinux.com.br/topico/C-C++/Diferenca-entre-gcc-e-g++


9. Re: Problemas com scanf()? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 04/02/2012 - 16:15h

Valeuuu levi, sem mais =D






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts