Jump to content

Recommended Posts

Posted

Olá ppl;

Estou a fazer um  programa que deve trabalhar com arrays mas está me sempre a dar erros estranhos, não percebo.

/*
* main.c
*
*  Created on: 7 de Nov de 2011
*      Author: Gil
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char nomes[6] = {"Gil", "Ana", "Joao", "Gregorio", "Bianca", "Violeta" };
int idade[6] = { 10, 9, 8, 7, 6, 13 };
int telefone[6] = { 916892321, 916892322, 916892324, 916892353, 914567821, 9178654321 };
int op;
printf("Escolha uma das seguintes opções.\n");
printf("1 - Ler dados de uma pessoa.\n");
printf("2 - Calcular média de idades.\n");
printf("3 - Listar todas as pessoas.\n");
printf("4 - Mostar o nome da pessoa mais nova.\n");
printf("5 - Listar dados das 3 pessoas mais velhas.\n");
scanf("%d", &op);
switch (op)
{
case 1:
	printf("Insira o nome desejado\n", nomes);
	break;
case 2:
	printf("A média é:", idade);
	break;
case 3:
	printf("A listagem dos nomes é a seguinte: \n", telefone);
	break;
case '4':
	printf("A pessoa mais nova é: \n", idade);
	break;
case 5:
	printf("Listagem dos 3 mais velhos", nomes);
	break;
}
system("pause");
return 0;
}



Os erros são esses

**** Build of configuration Debug for project trabalho ****

**** Internal Builder is used for build              ****

gcc -O0 -g3 -Wall -c -fmessage-length=0 -o main.o ..\main.c

..\main.c: In function 'main':

..\main.c:12:2: error: excess elements in char array initializer

..\main.c:12:2: error: (near initialization for 'nomes')

..\main.c:12:2: error: excess elements in char array initializer

..\main.c:12:2: error: (near initialization for 'nomes')

..\main.c:12:2: error: excess elements in char array initializer

..\main.c:12:2: error: (near initialization for 'nomes')

..\main.c:12:2: error: excess elements in char array initializer

..\main.c:12:2: error: (near initialization for 'nomes')

..\main.c:12:2: error: excess elements in char array initializer

..\main.c:12:2: error: (near initialization for 'nomes')

..\main.c:12:18: warning: initializer-string for array of chars is too long

..\main.c:14:2: warning: overflow in implicit constant conversion

..\main.c:26:3: warning: too many arguments for format

..\main.c:29:3: warning: too many arguments for format

..\main.c:32:3: warning: too many arguments for format

..\main.c:35:3: warning: too many arguments for format

..\main.c:38:3: warning: too many arguments for format

Build error occurred, build is stopped

Time consumed: 583  ms.

Alguma dica?

Obrigado

gmc11

 

Posted

primeiro erro :

char nomes[6] = {"Gil", "Ana", "Joao", "Gregorio", "Bianca", "Violeta" };

estas a declarar um array de caracteres e não um array de "strings", deverias ter algo como:

char * nomes[6] = {"Gil", "Ana", "Joao", "Gregorio", "Bianca", "Violeta" };

segundo:

printf("Insira o nome desejado\n", nomes);

nos printf's tens de dizer o que queres escrever e onde. para apresentares a lista de nomes terás de fazer um ciclo para cada nome ou tudo numa linha:

printf("Insira o nome desejado\n", nomes);
        for(i = 0; i < 6; i++)
  printf("\t%s\n", nomes[i]);

também tens de alterar os outros printf's para apresentar os valores 

printf("A média é: %d", idade);
IRC : sim, é algo que ainda existe >> #p@p
Posted

Oi

Obrigado pela ajuda mas continuo com problemas

/*
* main.c
*
*  Created on: 7 de Nov de 2011
*      Author: Gil
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char * nomes[6] = {"Gil", "Ana", "Joao", "Gregorio", "Bianca", "Violeta" };
int idade[6] = { 10, 9, 8, 7, 6, 13 };
int tel[6] = { 916892321, 916892322, 916892324, 916892353, 914567821, 9178654321 };
int op, i;
printf("Escolha uma das seguintes opções.\n");
printf("1 - Ler dados de uma pessoa.\n");
printf("2 - Calcular média de idades.\n");
printf("3 - Listar todas as pessoas.\n");
printf("4 - Mostar o nome da pessoa mais nova.\n");
printf("5 - Listar dados das 3 pessoas mais velhas.\n");
scanf("%d", &op);
switch (op)
{
case 1:

	break;
case 2:
	printf("Listagem dos numeros\n", nomes);
    for(i = 0; i < 6; i++)
    printf("\t[b]%d[/b]\n", idade[i]);
    break;
case 3:
    printf("Listagem dos nomes\n", nomes);
        for(i = 0; i < 6; i++)
          printf("\t[b]%s[/b]\n", nomes[i]);
        break;
case '4':

	break;
case 5:

	break;
}
system("pause");
return 0;
}

Os erros:

**** Build of configuration Debug for project trabalho ****

**** Internal Builder is used for build              ****

gcc -O0 -g3 -Wall -c -fmessage-length=0 -o main.o ..\main.c

..\main.c: In function 'main':

..\main.c:14:2: warning: overflow in implicit constant conversion -

int tel[6] = { 916892321, 916892322, 916892324, 916892353, 914567821, 9178654321 };

..\main.c:26:5: warning: too many arguments for format

printf("Listagem dos telefones\n", tel);

..\main.c:31:3: warning: too many arguments for format

printf("Listagem dos numeros\n", nomes);

..\main.c:36:6: warning: too many arguments for format

printf("Listagem dos nomes\n", nomes);

gcc -o trabalho.exe main.o

c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot open output file trabalho.exe: Permission denied

collect2: ld returned 1 exit status

Build error occurred, build is stopped

Time consumed: 1594  ms.

Estou perdido.... :wallbash:

gmc11

 

Posted

int tel[6] = { 916892321, 916892322, 916892324, 916892353, 914567821, 9178654321 };

lembra-te que os números inteiros têm um limite superior, tenta unsigned long long.

todos os outros error dos printf's foi erro meu ... mau copy-paste :

printf("Listagem dos numeros\n"); // removes o ", nomes"
IRC : sim, é algo que ainda existe >> #p@p
Posted

Se calhar tens que começar a olhar para os nomes dos erros e tentar perceber o que se passa em vez de te limitares a copiar código.

..\main.c:14:2: warning: overflow in implicit constant conversion -

int tel[6] = { 916892321, 916892322, 916892324, 916892353, 914567821, 9178654321 };

Um overflow ocorre quando tentas guardar numa variável numérica um valor superior à sua capacidade. Se estiveres a compilar esse código num computador pessoal um int terá 32bit, como se trata de um signed int, o valor máximo que lá podes colocar é 2^31 - 1 = 2 147 483 647.

Este é maior do que qualquer número de telemóvel, mas como te enganaste e escreveste o último número do array com 10 algarismos, um int de 32bit não tem capacidade para armazenar esse valor, daí o warning.

..\main.c:26:5: warning: too many arguments for format

printf("Listagem dos telefones\n", tel);

Quando fazes printf existe um formato que te permite incluir variáveis no output. Se a variável x fosse um int poderias fazer:

printf("Valor da variavel x: %d \n",x);

Em que %d indica que naquele local deve ser inserido o valor de uma variável e o argumento seguinte (x), indica à função printf que variável é essa. Podes incluir mais do que uma variável no mesmo printf. Podes usar %f para floats, %c para caracteres e %s para strings. Se na string que passas à função printf não aparecer nenhum formato destes( como estás a fazer) a função assume que não queres incluir variáveis no input, e tens um warning na compilação se passares variáveis à função.

Para além disso, repara que no teu caso, tel é um array, e como já te foi explicado num post anterior, a função printf não envia para o output todos os valores de um array automaticamente. Para isso terás que fazer um ciclo que escreva cada um dos números de telemóvel.

..\main.c:31:3: warning: too many arguments for format

printf("Listagem dos numeros\n", nomes);

Presumo que quisesses dizer "Listagem das idades\n", de qualquer forma está mal pela mesma razão, a variável nomes não está aí a fazer nada.

printf("Listagem dos numeros\n", nomes);

..\main.c:36:6: warning: too many arguments for format

Aqui o erro é precisamente o mesmo e revela que te limitaste a copiar o que foi dito sem tentares perceber. O HappyHippyHippo incluiu na sua explicação por engano a tua linha de código errada antes do seu código.

P.S.: Convinha que o código que colocas no post fosse o código que tentaste compilar e cujos erros estás a mostrar.

Não respondo a dúvidas por mensagem.

Posted

Obrigado;

O erro está aqui em cada case:

printf("Listagem dos nomes %c \n", nomes);

Description Resource Path Location Type

format '%c' expects type 'int', but argument 2 has type 'char **' main.c /trabalho line 36 C/C++ Problem

printf("Listagem dos numeros %d:", idade);

Description Resource Path Location Type

format '%d' expects type 'int', but argument 2 has type 'int *' main.c /trabalho line 26 C/C++ Problem

são warnings...

Cumps

gmc11

 

Posted

@alphasil

Porque é que estás a ignorar as nossas respostas?

És capaz de me explicar o que é que achas que devia aparecer no output quando escreves esta linha?

printf("Listagem dos numeros %d:", idade);

Não respondo a dúvidas por mensagem.

Posted

Oi

Já não dá erro mas o estranho é que só me aparece o menu quando ponho terminar no eclipse...

/*
* main.c
*
*  Created on: 7 de Nov de 2011
*      Author: Gil
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char * nomes[6] = {"Gil", "Ana", "Joao", "Gregorio", "Bianca", "Violeta" };
int idade[6] = { 10, 9, 8, 7, 6, 13 };
int tel[6] = { 916892321, 916892322, 916892324, 916892353, 914567821, 917865432 };
int op, i;
printf("Escolha uma das seguintes opções.\n");
printf("1 - Ler dados de uma pessoa.\n");
printf("2 - Calcular média de idades.\n");
printf("3 - Listar todas as pessoas.\n");
printf("4 - Mostar o nome da pessoa mais nova.\n");
printf("5 - Listar dados das 3 pessoas mais velhas.\n");
scanf("%d", &op);
switch (op)
{
case 1:
	  printf("Listagem dos telefones: \n");
     for(i = 0; i < 6; i++)
     printf("%d", tel[i]);
	break;
case 2:
	printf("Listagem dos numeros: \n");
    for(i = 0; i < 6; i++)
    printf("\t[b]%d[/b]\n", idade[i]);
    break;
case 3:
    printf("Listagem dos nomes: \n");
        for(i = 0; i < 6; i++)
        printf("%s\n", nomes[i]);
        break;
case '4':

	break;
case 5:

	break;
}
system("pause");
return 0;
}




gmc11

 

Posted

Em vez do fflush(stdin), aconselho a começar a estudar validações, pois são muito melhores que o fflush

Além do que, o fflush() quando aplicado a streams de input (ou streams de input/output depois duma operação de input), não tem comportamente definido pela linguagem C.

Se estás em Windows (que define o comportamento de fflush(stdin), com uma nota escondida que não é comportamento Standard), podes usá-lo, mas tornas o teu programa impossível de correr noutros Sistemas Operativos.

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!

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.