paulo1205
(usa Ubuntu)
Enviado em 21/11/2017 - 12:08h
Ga X escreveu:
Pessoal eu sou um pouco novato ainda no Ubuntu e quando eu estava no Windows nao tinha muitos problemas para programar em C , também sou iniciante em programação e quando eu tento rodar esse codigo aparece tal problema.
O codigo esta aqui :
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
Pode remover esta segunda inclusão do cabeçalho. Ela não chega a ser um erro, mas é redundante, e, como tal, gera ineficiência e complica a manutenção do código.
#include <ctype.h>
int main()
Essa delcaração de
main , em C, significa que a função pode receber qualquer quantidade de parâmetros de quaisquer tipos, e é, em princípio, inadequada para uso em sistemas operacionais dos nossos PCs.
Há duas formas padronizadas para a delcaração de
main em C:
• Se você não quiser receber argumentos vindos do sistema operacional, deve declará-la como “
int main(void) ”.
• Se você quiser receber tais parâmetros, deve declará-la como “
int main(int argc, char **argv) ”. Nesse caso, os argumentos serão passados na forma de um
array de
strings , contidas no vetor
argv , e a quantidade de elementos nesse
array é indicada no parâmetro
argc . (Os nomes
argc e
argv são mera convenção; você pode usar outros nomes, desde que preserve os tipos e a ordem dos parâmetros).
{
int codigo;
char nome[30], controle;
float salario;
arquivo = fopen("cadastro.txt" , "w");
Como já apontou nosso colega na postagem anterior, faltou declarar
arquivo .
do
{
printf("Informe o codigo do colaborador : ");
scanf ("%i" , &codigo);
printf("\nInforme o nome do colaborador : ");
scanf("%s", &nome );
Aqui você não deve usar “
&nome ”, mas apenas “
nome ”.
À conversão
%s de
scanf () deve corresponder um parâmetro do tipo
char * , cujo valor indica o endereço do primeiro elementos de um
array de caracteres que conterá a
string lida. Quando você diz apenas “
nome ”, o tipo do argumento concorda com o que a função espera receber, pois
arrays usados em expressões que não envolvam a aplicação dos operadores unários
sizeof ou
& têm como tipo resultante ponteiros para o tipo de seus elementos. Contudo, quando você diz “
&nome ”, você usa justamente o operador
& , de modo que o tipo do argumento passa a ser ponteiro para o array inteiro de uma vez.
printf("\nInforme o salario do colaborador : ");
scanf ("%f" , &salario);
fprintf(arquivo , "%i %s %f" , codigo, nome, salario);
printf("\nDeseja cadastrar outro <s/n>:");
scanf ("%c", &controle);
}while (toupper (controle) == 'S');
fclose(arquivo);
Que versão do C você esta usando? No Windows, até pouco tempo atrás, o padrão era usar ANSI C (1989). Nesse caso, você não deve sair de
main () sem ser através de um comando
return explícito ou uma chamada à função
exit ().
Versões mais recentes do padrão do C (1999, 2011) e todas as versões padronizadas do C++ assumem implicitamente um comportamento equivalente ao comando “
return 0; ”, caso se chegue ao final do bloco de
main () sem um
return ou
exit () explícito.
}
Ai no Terminal aparece isso:
In function ‘main’:
codi.c:52:9: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[30]’ [-Wformat=]
scanf("%s", &nome );
^
Ajuda ae pf .