Автор Тема: C++ Editor/compilator  (Прочетена 8363 пъти)

trafik77

  • Напреднали
  • *****
  • Публикации: 51
  • Distribution: Ubuntu
  • Window Manager: Gnome
    • Профил
Re: C++ Editor/compilator
« Отговор #15 -: Dec 25, 2008, 10:39 »
Отново по темата: използвам gcc, но не ми признава по никакъв начин въвеждане на букви от клавиатурата. Нито scanf("%c", ch), нито getcar(), нито gets(). Не дава грешка при компилация, но при изпълнение просто прескача тези редове.
програма която е компилирана с   g++
 #include <stdio.h>



int i,k,N,mashini[4][5],izvkont[4][5],dostavki[4][5],ObstBroi=0,imin,imax,kmin,kmax;



 main()

{

    do{

    printf("Vavedete N za broi zagorovki(N>0):");

    scanf("%d",&N);}while(N<=0);

    for(i=imin=imax=kmin=kmax=0;i<4;i++)

      {

      printf("\nRed mashini No%d:\n",i+1);

      for(k=0;k<5;k++)

        {

        do{

        printf("Broi izrabotvani detaili ot mashina No%d za rabotna smqna:",k+1);

        scanf("%d",&mashini[k]);}while(mashini[k]<=0);

        ObstBroi+=mashini[k];

        izvkont[k]=mashini[k]/N;

        if(!(mashini[k]%N))dostavki[k]=izvkont[k];

        else dostavki[k]=izvkont[k]+1;

        if(mashini[k]>mashini[imax][kmax])

          {

          imax=i;

          kmax=k;

          }

        if(mashini[k]<mashini[imin][kmin])

          {

          imin=i;

          kmin=k;

          }

        }

      }

    for(i=0;i<4;i++)

      {

      printf("\nRed mashini No%d:\n",i+1);

      for(k=0;k<5;k++)

        {

        printf("Mashina No%d\n",k+1);

        printf("Broi dostavki:%d\n",dostavki[k]);

        printf("Broi izraboteni detajli:%d\n",mashini[k]);

        printf("Broi izvozeni konteineri:%d\n",izvkont[k]);

        }

      }

    printf("\nObst broi na izrabotenite detaili v ceha:%d\n",ObstBroi);

    printf("Mashina No%d ot red %d e proizvela nai-mnogo detaili:%d\n",kmax+1,imax+1,mashini[imax][kmax]);

    printf("Mashina No%d ot red %d e proizvela nai-malko detaili:%d\n",kmin+1,imin+1,mashini[imin][kmin]);

}


при мен проблема беше следния
че под Win e void main()
а под Linux main()

« Последна редакция: Dec 25, 2008, 11:00 от trafik77 »
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: C++ Editor/compilator
« Отговор #16 -: Dec 25, 2008, 12:13 »
Това не е вярно, съвсем спокойно може да бъде void main() в линукс, gcc евентуално ще изреве някакъв warning, но не е фатално. Иначе най-правилното е:

int main (int argc, char *argv[])

където argc е броя параметри на командния ред, а argv[] е масив от стрингове - параметри на командния ред. Нулевият елемент от масива е името на извиканата програма. Например ако програмата се нарича test и я извикаш от командния ред така:

./test input.txt output.txt

argc ще ти е равно на 2, argv[] ще съдържа './test', 'input.txt', 'output.txt'

main() връща int, за да може примерно след като програмата завърши с return ERRCODE, този ERRCODE да може да се прихваща от шел скриптове, викащи твоята програма.
Активен

"Knowledge is power" - France is Bacon

trafik77

  • Напреднали
  • *****
  • Публикации: 51
  • Distribution: Ubuntu
  • Window Manager: Gnome
    • Профил
Re: C++ Editor/compilator
« Отговор #17 -: Dec 25, 2008, 13:39 »
Това не е вярно, съвсем спокойно може да бъде void main() в линукс, gcc евентуално ще изреве някакъв warning, но не е фатално. Иначе най-правилното е:

int main (int argc, char *argv[])

където argc е броя параметри на командния ред, а argv[] е масив от стрингове - параметри на командния ред. Нулевият елемент от масива е името на извиканата програма. Например ако програмата се нарича test и я извикаш от командния ред така:

./test input.txt output.txt

argc ще ти е равно на 2, argv[] ще съдържа './test', 'input.txt', 'output.txt'

main() връща int, за да може примерно след като програмата завърши с return ERRCODE, този ERRCODE да може да се прихваща от шел скриптове, викащи твоята програма.
 
 добре на горния  код не иска да се компилира 
ти някаква друга грешка в кода откриваш ли
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: C++ Editor/compilator
« Отговор #18 -: Dec 25, 2008, 14:21 »
Това което ми прави впечатление е че там където извършваш аритметични операции с двумерни масиви, не указваш *втория* елемент.

Код:
Примерно имаш array[x][y].

array [x] в действителност е указател към едномерен масив с размерност y, a не стойност на елементите от [x][0] до [x][y].

Когато присвоиш стойност на array[x], всъщност присвояваш указател, а не стойности. Според мен компилаторът ще те бие през ръцете заради това. В случаят имаш:


[quote]int mashini[4][5], izvkont[4][5], dostavki[4][5][/quote]

И правиш:

[quote] izvkont[k]=mashini[k]/N;[/quote]

Последната операция (според мен компилаторът не би следвало да я одобри, но да речем го направи) би присвоила на izvkont[k] адресът в паметта, където е разположен mashini[k] разделен на N.

Не знам във visual C това защо работи, но тук ще трябва да извъртиш още един цикъл,  където тази аритметика се повтаря за всеки елемент от [k][0] до [k][5]. В противен случай ти не работиш със стойността на елементите от масива, а се опитваш да променяш съвсем други неща.


Мамка му и прасе е тоя форум, форматирането разказва играта на пейстнатия С код :(
« Последна редакция: Dec 25, 2008, 14:23 от gat3way »
Активен

"Knowledge is power" - France is Bacon

trafik77

  • Напреднали
  • *****
  • Публикации: 51
  • Distribution: Ubuntu
  • Window Manager: Gnome
    • Профил
Re: C++ Editor/compilator
« Отговор #19 -: Dec 25, 2008, 14:52 »
Това което ми прави впечатление е че там където извършваш аритметични операции с двумерни масиви, не указваш *втория* елемент.

Код:
Примерно имаш array[x][y].

array [x] в действителност е указател към едномерен масив с размерност y, a не стойност на елементите от [x][0] до [x][y].

Когато присвоиш стойност на array[x], всъщност присвояваш указател, а не стойности. Според мен компилаторът ще те бие през ръцете заради това. В случаят имаш:


[quote]int mashini[4][5], izvkont[4][5], dostavki[4][5][/quote]

И правиш:

[quote] izvkont[k]=mashini[k]/N;[/quote]

Последната операция (според мен компилаторът не би следвало да я одобри, но да речем го направи) би присвоила на izvkont[k] адресът в паметта, където е разположен mashini[k] разделен на N.

Не знам във visual C това защо работи, но тук ще трябва да извъртиш още един цикъл,  където тази аритметика се повтаря за всеки елемент от [k][0] до [k][5]. В противен случай ти не работиш със стойността на елементите от масива, а се опитваш да променяш съвсем други неща.


Мамка му и прасе е тоя форум, форматирането разказва играта на пейстнатия С код :(
Ами след промяната с main() работи и под Linux,
не става въпрос само за този код дори и една елементарна програма за събиране  пак става същото  и след промяната main () всичко е ок

« Последна редакция: Dec 25, 2008, 18:17 от trafik77 »
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: C++ Editor/compilator
« Отговор #20 -: Dec 25, 2008, 15:06 »
Няма начин :) Аз доста пъти съм правил void main() - никога досега не е имало проблем заради това.

Какъв компилатор е това, gcc?
Активен

"Knowledge is power" - France is Bacon

trafik77

  • Напреднали
  • *****
  • Публикации: 51
  • Distribution: Ubuntu
  • Window Manager: Gnome
    • Профил
Re: C++ Editor/compilator
« Отговор #21 -: Dec 25, 2008, 15:08 »
Няма начин :) Аз доста пъти съм правил void main() - никога досега не е имало проблем заради това.

Какъв компилатор е това, gcc?
g++ geany
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: C++ Editor/compilator
« Отговор #22 -: Dec 25, 2008, 15:09 »
А, тва е c++, не обикновено C...не знам, тогава може.
Активен

"Knowledge is power" - France is Bacon

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Re: C++ Editor/compilator
« Отговор #23 -: Dec 25, 2008, 17:19 »
Всъщност най-правилно е:

int main(int argc, char *argv[], char *envp[])

:)
Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Активен

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Re: C++ Editor/compilator
« Отговор #25 -: Dec 25, 2008, 17:37 »
Няма никакъв проблем да се използва void main, особено ако излизаш от програмата с exit :P
Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: C++ Editor/compilator
« Отговор #26 -: Dec 25, 2008, 17:53 »
И без да излезе с exit няма проблем. Предполагам gcc слага нещо в .dtors по въпроса така че програмата да приключи изпълнението си при излизане от main() безопасно.

От друга страна...тва е за /bin/cat:

Цитат
Disassembly of section .dtors:

0000000000607248 <.dtors>:
  607248:       ff                      (bad)
  607249:       ff                      (bad)
  60724a:       ff                      (bad)
  60724b:       ff                      (bad)
  60724c:       ff                      (bad)
  60724d:       ff                      (bad)
  60724e:       ff                      (bad)
  60724f:       ff 00                   incl   (%rax)
  607251:       00 00                   add    %al,(%rax)
  607253:       00 00                   add    %al,(%rax)
  607255:       00 00                   add    %al,(%rax)

изглежда като безсмислици :)
« Последна редакция: Dec 25, 2008, 17:56 от gat3way »
Активен

"Knowledge is power" - France is Bacon

tarator

  • Напреднали
  • *****
  • Публикации: 849
    • Профил
Re: C++ Editor/compilator
« Отговор #27 -: Dec 25, 2008, 17:58 »
Няма логика програмата да излезе "опасно". В calling conventions на всички архитектури, за които се сещам функциите връщат резултат от тип int в регистър. Няма нужда от никакви измислени dtors за да работи както трябва, просто програмата ще върне някаква произволна стойност (т.е. тази, която е имало в този регистър при излизане от main).
Активен

A gentleman is one who is never rude unintentionally. - Noel Coward

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: C++ Editor/compilator
« Отговор #28 -: Dec 25, 2008, 18:07 »
Е значи е напълно безопасно. Освен ако не ти пука за върнатата стойност.
Активен

"Knowledge is power" - France is Bacon

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Free Compilator for win ?
Общ форум
JOKe 18 4073 Последна публикация Apr 27, 2005, 19:48
от picmaster
Hex editor
Общ форум
zaxs 2 3301 Последна публикация Dec 02, 2005, 19:48
от ivak
Multihighlight editor?
Настройка на програми
_NetCutter_ 8 2661 Последна публикация Dec 01, 2006, 22:00
от _NetCutter_
Php editor за slackware
Настройка на програми
emagi 6 2804 Последна публикация Oct 04, 2007, 11:32
от senser
Rq: visual editor
Идеи и мнения
naxan 15 4942 Последна публикация Jan 29, 2008, 00:09
от naxan