2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 14:13 
Выдает ошибки при компиляции(я новичок,только начинаю изучать язык си,поэтому не пойму проблему((..)
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include<stdio.h>
#include<math.h>
void main(){
double x1,y1,z1;
double x2,y2,z2;
double x3,y3,z3;
printf("x1 y1 z1?\n");
scanf("%lf", &x1 &y1 &z1);
printf("x2 y2 z2 ?\n");
scanf("%lf", &x1 &x2 &y3);
x3=(x1+x2)/2;
y3=(y1+y2)/2;
z3=(z1+z2)/2;
printf("x3 y3 z3");
scanf("%lf", &x3 &y3 &z3);
getchar();}

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 15:22 
Конкретно какие ошибки выдает — это, видимо, военная тайна. Ладно. Во-первых, main возвращает int, а не void, во-вторых, scanf так не вызывают.

scanf("%lf %lf %lf", &x1, &y1, &z1);

В-третьих, вы в конце программы вводите еще три числа и перезаписываете ими значения x3, y3, z3 — уж не знаю зачем. Возможно, вы хотели сделать

printf("x3 y3 z3\n%lf %lf %lf", x3, y3, z3);

?

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 15:36 
Спасибо,я и не заметил этих маленьких огрехов,из-за которых программа не работала.... :oops:

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 18:17 
Аватара пользователя
Joker_vD, а почему main не может быть типа void? И тогда уж нужно было подсказать, что в конце должно быть return 0.

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 18:39 
Потому что по стандарту функция main должна возвращать int. А вот return в ней можно и не писать, поскольку код будет выполняться так, как если бы в конце стояло return 0;.
P.S. Разумеется, некоторые компиляторы допускают вольности типа void main(){...}, но лучше не вестись на подобные послабления :-) .

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 18:47 

(Оффтоп)

А еще была дискуссия, что while(1) не по стандарту, хотя так пишут все, но нормальный компилятор должен на это ругаться, а писать надо for(;;)

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 18:57 
Аватара пользователя
О как. Спасибо.

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 18:59 
_Ivana в сообщении #789749 писал(а):

(Оффтоп)

А еще была дискуссия, что while(1) не по стандарту, хотя так пишут все, но нормальный компилятор должен на это ругаться, а писать надо for(;;)
Пардон, а что не так с while(1)?

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 19:18 
Детали не помню, а навскидку обсуждение не нашел. Речь шла об оптимизации компилятором и соответствии стандартам, типа использование любых четко не оговоренных в стандарте конструкций потенциально опасно. Открыл своего К-Р на 74 странице, действительно (как и говорили) в качестве бесконечного цикла предложен for(;;).

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 19:44 
_Ivana
Что в C89, что в C99 while(1), for(;1;) и for(;;) идентичны, т.к. в обоих редакциях сказано:

Цитата:
The controlling expression of an iteration statement shall have scalar type.
Цитата:
An iteration statement causes a statement called the loop body to be executed repeatedly until the controlling expression compares equal to 0.
Цитата:
Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a nonzero constant.

Пользуйтесь standard-conformant компиляторами!

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 20:00 
Joker_vD, у меня своих стереотипов по данному вопросу нет (я сам везде while(1) пишу :-) ), но я порой читаю подобное (снизу и на следующей странице), и люди пишут авторитетные в своей области, поэтому доверяю. Кстати, это далеко не единственный акцент на этом моменте на том форуме.
UPD и вот здесь, с примерами

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 20:50 
Я не увидел ни одной ссылки на стандарт, которая бы говорила о том, что while(1) неправильно.
Кому-то не понравилось, что какой-то старый компилятор выдаёт предупреждение, что управляющее выражение - константа.
Предупреждение довольно бессмысленно, т.к. это совершенно стандартная ситуация при работе шаблонами, да и без них встречается при написании переносимого кода.

(Оффтоп)

А гуру бывают разные.

 
 
 
 Re: Как сделать программу рабочей?!?!?
Сообщение17.11.2013, 21:09 
Аватара пользователя
_Ivana в сообщении #789788 писал(а):
Joker_vD, у меня своих стереотипов по данному вопросу нет (я сам везде while(1) пишу :-) ), но я порой читаю подобное
(снизу и на следующей странице), и люди пишут авторитетные в своей области, поэтому доверяю. Кстати, это далеко не единственный акцент на этом моменте на том форуме.
UPD и вот здесь, с примерами
Довольно странное мнение. По мне так понятнее писать #define TRUE 1 и while(TRUE) или #include <stdbool.h> и while(true).

 
 
 [ Сообщений: 13 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group