Problemas com C no linux

Iniciado por Alex_Sigma, 09 de Março de 2012, 12:15

tópico anterior - próximo tópico

Alex_Sigma

olá, estou a um tempão tentando programar C no linux mas estou tendo muita dificuldade em resolver um problema, sempre programei no windows e estou tentando conhecer o linux nessa parte de programação, mas eis o que ocorre:
tento compilar o seguinte código no CodeBlocks apertando F9:

#include <stdio.h>
#include <ncurses.h>

main()
{
   int i=0, V[5];
   printf ("Digite um Vetor: \n");
   for(i=1;i<=5;i++)
   {
       scanf("%d", &V);
   }
   system("pause");
}

e o terminal me passa a seguinte mensagem:

/home/ruan/Códigos em C/Teste: 7 Syntax error: word unexpected (expecting ")")

Alguém me aponte onde está o erro, já fiz várias modificações mas permanece o erro, já vi em alguns sites que a programação em C no linux sofre algumas mudanças mas nunca citam algo mais profundo além de dizer que não tem uma biblioteca ou tem outra nova, será que além de me dizer onde está o erro alguem poderia me mostrar um código escrito no windows e como ele ficaria no linux?
obrigado desde já  ???

Darcamo

Fiz algumas modificações no seu programa e consegui fazer funcionar aqui.
#include <stdio.h>
#include <ncurses.h>

main()
{
    int i, V[5];
    printf ("Digite um Vetor: \n");
    for(i = 0; i < 5; i++)
    {
        scanf("%d", &V[i]);
    }
   
    printf ("%s\n","Valores Gravados");

    for (i = 0; i < 5; ++i)
    {
        printf ("%d\n",V[i]);
    }
}


Como "V" é um vetor e você quer gravar diferentes elementos nele dentro do laço for, então o correto seria usar "&V" no scanf. Ele também compila apenas com "V" (não precisa do "&" porque "V" é um vetor e por isso já é o endereço da primeira posição), mas nesse caso você sempre vai gravar na posição 0.

Removi o system("pause"). Além de não funcionar no Linux (não tem "pause") usar a função system só para isso não é bom. Não lembro agora a melhor solução, mas você deve encontrar sem problemas.

Adicionei um outro laço para mostrar que os valores realmente foram gravados no vetor.

sigur

Citação de: Darcamo online 09 de Março de 2012, 16:10
Fiz algumas modificações no seu programa e consegui fazer funcionar aqui.
#include <stdio.h>
#include <ncurses.h>

main()
{
    int i, V[5];
    printf ("Digite um Vetor: \n");
    for(i = 0; i < 5; i++)
    {
        scanf("%d", &V[i]);
    }
   
    printf ("%s\n","Valores Gravados");

    for (i = 0; i < 5; ++i)
    {
        printf ("%d\n",V[i]);
    }
}


Como "V" é um vetor e você quer gravar diferentes elementos nele dentro do laço for, então o correto seria usar "&V" no scanf. Ele também compila apenas com "V" (não precisa do "&" porque "V" é um vetor e por isso já é o endereço da primeira posição), mas nesse caso você sempre vai gravar na posição 0.

Removi o system("pause"). Além de não funcionar no Linux (não tem "pause") usar a função system só para isso não é bom. Não lembro agora a melhor solução, mas você deve encontrar sem problemas.

Adicionei um outro laço para mostrar que os valores realmente foram gravados no vetor.

No seu código, você colocou para i de 0 a 4? No dele tinha de 1 a 5? Seria aí o erro?

Darcamo

Não era esse o erro, mas isso também era um erro.
Como o vetor V foi declarado com tamanho 5 então ele vai de 0 a 4. Se tentar acessar mais que isso terá problemas.

fpissarra

Citação de: Darcamo online 09 de Março de 2012, 17:29
Não era esse o erro, mas isso também era um erro.
Como o vetor V foi declarado com tamanho 5 então ele vai de 0 a 4. Se tentar acessar mais que isso terá problemas.

Este é um dos problemas com o código... Eis mais alguns:

- Em C não se declara funções com lista de parâmetros vazios. Isso é C++, não C;
- Em C a função main() deveria retornar um int, SEMPRE...
- 'system("pause")' é usado para executar o comando pause em COMMAND.COM, não no 'bash';
- scanf não sabe se o ponteiro aponta para um item único ou um array.

O código deveria ser mais ou menos assim:

#include <stdio.h>

int main(void)
{
 int i=0, V[5];

 printf ("Digite um Vetor: \n");

 for (i=0; i<5; i++)
 {
   scanf("%d", &V[i]);
 }

 return 0;
}


Node que:

- Retirei a inclusão do header ncurses.
- Retireo o system() (que é definido em stdlib.h, acho).
- estou obtendo os ponteiros dos itens do array individualmente, dentro do loop.
- retorno 0 em main().

[]s
Fred

Alex_Sigma

@fpissara
copiei o código igualmente para o meu codeblocks e olha só:

http://imageshack.us/f/13/capturadetelaem20120310.png/

que maldito erro de sintaxe é esse? ¬¬

fpissarra

Citação de: Alex_Sigma online 10 de Março de 2012, 19:04
@fpissara
copiei o código igualmente para o meu codeblocks e olha só:

que maldito erro de sintaxe é esse? ¬¬

Não faço a mínima idéia:
$ cat test.c
#include <stdio.h>

int main(void)
{
  int i=0, V[5];

  printf ("Digite um Vetor: \n");

  for (i=0; i<5; i++)
  {
    scanf("%d", &V[i]);
  }

  return 0;
}
$ gcc -o test test.c
$ ./test
Digite um Vetor:
1
2
3
4
5
$


sigur

Citação de: Alex_Sigma online 10 de Março de 2012, 19:04
@fpissara
copiei o código igualmente para o meu codeblocks e olha só:

http://imageshack.us/f/13/capturadetelaem20120310.png/

que maldito erro de sintaxe é esse? ¬¬

Minha opinião: erro de encode de caractere, ou seja, se você copiou o texto daqui do forum e deu um 'colar' no seu editor, pode ser que algum caractere não tem o mesmo endereçamento do teclado. Pra mim, o problema está nas aspas duplas ". Tente apaga-las e digitar na mão, você mesmo.

Quando fui copiar e colar uns comandos para colocar no .inputrc, tive esse tipo de problema.

fpissarra

Citação de: sigur online 11 de Março de 2012, 15:36
Citação de: Alex_Sigma online 10 de Março de 2012, 19:04
@fpissara
copiei o código igualmente para o meu codeblocks e olha só:

http://imageshack.us/f/13/capturadetelaem20120310.png/

que maldito erro de sintaxe é esse? ¬¬

Minha opinião: erro de encode de caractere, ou seja, se você copiou o texto daqui do forum e deu um 'colar' no seu editor, pode ser que algum caractere não tem o mesmo endereçamento do teclado. Pra mim, o problema está nas aspas duplas ". Tente apaga-las e digitar na mão, você mesmo.

Quando fui copiar e colar uns comandos para colocar no .inputrc, tive esse tipo de problema.

Ok.... se vc colar no Windows pode ser que isso aconteça, de fato... Ubuntu usa UTF-8, Windows usa uma variação do ISO-8859-1 (WINDOWS-1252). Só lembro que esse forum é dedicado ao UBUNTU...

[]s
Fred

Samuel Vorpagel

ou o Code::Blocks não reconheceu o GCC, tente compilar o codigo direto no terminal.
gcc nomeprograma.c
para executar
./a.out


brunokewell7

sou iniciante em programação, só que preciso fazer um trabalho pra facul...
só que estou tendo problemas com a <ncurses.h>
consegui instalar só não consegui iniciar ela,
se alguém puder me ajudar ...