ASHASHIN Posted March 15, 2012 at 02:40 PM Report #444065 Posted March 15, 2012 at 02:40 PM Boas, estava a tentar fazer com que um programa imprimisse uma cadeia de chars quando o resultado de de uma soma fosse maior que outra soma e, imprimisse outra cadeia caso contrário (código abaixo). O que acontece é que o visual c++ express 2010 diz que eu estou a declarar mal as variáveis (erros C2198 e C2082) #include <stdio.h> #include <stdlib.h> #include <math.h> char calcs (char*a, char*b, int c, int d, int e, int f); int main (void) { calcs (); return 0; } char calcs (char*a, char*b, int c, int d, int e, int f) { char a[1024]; char b[1024]; int c; int d; int e; int f; scanf_s ("%ca", &a); scanf_s ("%ca", &b); scanf_s ("%lf", &c); scanf_s ("%lf", &d); scanf_s ("%lf", &e); scanf_s ("%lf", &f); return c+e > d+f ? printf ("%a") : printf ("%b"); } P.S: se encontrarem alguma coisa no código que esteja mal (para além da declaração de variáveis) agradecia que me avisassem 🙂
pmg Posted March 15, 2012 at 03:10 PM Report #444068 Posted March 15, 2012 at 03:10 PM Não podes re-definir as variaveis depois de as teres definido na "assinatura" da função char calcs(char*a, char*b, int c) { /* ... */ } Dentro da função a é um char*; b é um char*, c é um int, etc ... Não é possível redefinir, nem que seja para a mesma coisa. Se queres as variaveis definidas na assinatura da função, tira-as do código. Se preferes defini-las no código, tira-as da assinatura da função. Outros pontos dignos de nota: 1) Usas um protótipo para a função calcs() que não respeitas dentro da função main. Basicamente tem tudo de estar de acordo em todas as vertentes. Se o protótipo diz que a função tem 6 parametros, quando chamas a função fornce 6 argumentos! 2) A função scanf_s() não é reconhecido pelo Standard. Possivelmente o teu compilador fornece-a como extra. Se queres fazer um programa que funcione em todos os compiladores de C (sem extra) usa scanf() 3) Não conheço os particulares da função scanf_s(), mas assumindo que são parecidos com os da função scanf(), a string de conversão e o tipo de variável têm que estar de acordo. Na função scanf(), a string de conversão "%c" "quer" um ponteiro para caracter que estás a fornecer; o "a" seguinte não faz nada. a string de conversão "%lf" "quer" um ponteiro para um double, mas estás a fornecer um ponteiro para um int. Não faças isso: tem tudo de estar acordo com tudo. 4) Por último; a tua última expressão de return está a fazer muitas coisas ao mesmo tempo. Sugiro que dividas em duas ou mais instruções que façam uma só coisa cada. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
ASHASHIN Posted March 15, 2012 at 09:33 PM Author Report #444115 Posted March 15, 2012 at 09:33 PM obrigado pela resposta e pelas dicas 🙂 em relação à funcão scanf_s, eu utilizei-a porque o na altura da compilação aparecia um aviso a dizer que a função era insegura e, nas aulas o professor avisou que deviamos ter atenção também à segurança quando estivessemos a programar
pmg Posted March 15, 2012 at 11:03 PM Report #444144 Posted March 15, 2012 at 11:03 PM em relação à funcão scanf_s, eu utilizei-a porque o na altura da compilação aparecia um aviso a dizer que a função era insegura e, nas aulas o professor avisou que deviamos ter atenção também à segurança quando estivessemos a programar O problema de seguranca com a funcao scanf aplica-se apenas quando a string de formatacao 'pede' um buffer (basicamente "%s" ou "%[...]"). Nestes casos, se o utilizador escrever um input que nunca mais acaba, esse input iria ser escrito no tal de buffer que nao tem espaco suficiente para o input: causando buffer overflow. Para evitar buffer overflow no scanf, limita sempre o input ao espaco disponivel. Alem disso verifica sempre se o resultado do scanf é o esperado, ou seja, basicamente se é o numero de variaveis a atribuir. char name[30], address[256]; if (scanf("%29s", name) != 1) /* erro */ if (scanf("%255[^\n]", address) != 1) /* erro */; What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now