IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Проблемма с програмированием (http://www.imho.ws/showthread.php?t=94017)

alexksei 11.10.2005 01:52

Проблемма с програмированием
 
Короче нужно сделать маленькую работу на языке С, я в програминге ничего на шарю. Вот вопрос: я скопировал из инета код вот он
#include <stdio.h>
main()
{
int a,b,c;
printf("\nThe first number is ");
scanf("%d",&a);
printf("The second number is ");
scanf("%d",&b);
c = a + b;
printf("The answer is %d \n",c);
}


Я делаю compile и run, но после ввода первых двух чисел программа просто закрывается, хотя должна выдавать сумму этих двух чисел. Так же происходит и с той работой которую я пытаюсь сделать. (пользуюсь программой devc++) Что может быль не так?

BorLase 11.10.2005 02:48

очевидно, ты просто не успеваешь прочесть вывод на экран; добавленные строки заставят окно ждать ввода символа и нажатия Enter.

#include <stdio.h>
main()
{
int a,b,c;
char c;
printf("\nThe first number is ");
scanf("%d",&a);
printf("The second number is ");
scanf("%d",&b);
c = a + b;
printf("The answer is %d \n",c);
scanf("%c", &c);
}

alexksei 11.10.2005 16:39

Ага большое спасибо за разяснение :)

7en 11.10.2005 19:52

также можно добавить в начале #include <conio.h> и в конце (перед скобкой) getch();
Tогда программа будет ждать нажатия клавиши, перед тем как закрыться.

alexksei 14.10.2005 02:21

Еще один вопрос: Как указать такое дело?

Надо возвести х в степень у при этом если (x=0 AND y≤0) OR (x<0 AND y не целое число)б должно выдавать ОШИБКА. Со всем справился кроме того что у не целое числоб как это указать ? Вообще у любое, так что int y не прдлагать :)

Vellion 14.10.2005 10:37

Вот такой вариант могу предложить...
Код:

#include<conio.h>
#include<stdio.h>

void main(void)
{
        float y;
        int tmp;
       
        y = 1.00;
        tmp = y;
        if (y - tmp) printf("Не целое!");
        else printf("Целое!");
        getch();
}


BorLase 14.10.2005 11:51

Цитата:

Сообщение от Vellion
Вот такой вариант могу предложить...

про переполнение слышал? ;)

Код:

#include <math.h>
#include <stdio.h>
      main()
      {
        double x, y, n;
        x = -41.56789;
        y = modf(x, &n);
        printf("modf(%f)=fractional %f and integer : %f",
                                                  x, y, n);
      }


tiranozaurus 15.10.2005 20:30

а еще можно поставить в конце "return 0"
тоже прет
я только что начал учить, тоже на этом примере ;)

alexksei 28.10.2005 01:53

Короче у меня снова вопрос. Вот код, судя про всему что то в нём не так, при компиле всё ОК, но если запускаеьш программу, то сразу выдаётся ошибка. Текст не русский в коде присутствует, но я думаю перевод не нужен.

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main(float argc, char *argv[]){
void prindi (float celsius, float fahrenheit, float a, float b, float aste, char nimi[20]);
float kraadid (int celsius);
float astmed(float a, float b);

float celsius;
float fahrenheit;
char nimi[20];
float a,b;
float aste;
celsius = atof(argv[1]);
strcpy(nimi, argv[2]);
fahrenheit=kraadid(celsius);
a = atof(argv[3]);
b = atof(argv[4]);
aste=astmed(a,b);
prindi(celsius,fahrenheit,a,b,aste,nimi);
system("PAUSE");
return 0;

}

float kraadid(int celsius) {
float fahrenheit;
fahrenheit=1.8*celsius+32;
return fahrenheit;

}
float astmed(float a, float b){
float aste;
aste= pow(a, b);
return aste;
}

void prindi (float celsius, float fahrenheit, float a, float b, float aste, char nimi[20]){
printf("Nimi on: %s\n%d kraadi Celsiuse skaala on %5.2f kraadi Fahrenheiti skaalal\n%5.2f astmel %5.2f on %5.2f\n", nimi, celsius, fahrenheit, a, b, aste);
}

ЕЖ 28.10.2005 02:12

alexksei
Бред у тебя какой-то в функции main в начале написан...

На сколько я понял всё должно выглядеть примерно так:
Код:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main(float argc, char *argv[])
{
  float celsius = atoi(argv[1]);
  float fahrenheit = kraadid(celsius);
  char nimi[20];
  float a = atoi(argv[2]), b = atoi(argv[3]);
  float aste = astmed(a,b);
  strcpy(nimi, argv[4]);
  prindi(celsius,fahrenheit,a,b,aste,nimi);
  return 0;
}

float kraadid(int celsius)
{
  float fahrenheit;
  fahrenheit = 1.8*celsius+32;
  return fahrenheit;
}

float astmed(float a, float b)
{
  float aste;
  aste = pow(a, b);
  return aste;
}

void prindi (float celsius, float fahrenheit, float a, float b, float aste, char nimi[20])
{
  printf("Nimi on: %s\n%d kraadi Celsiuse skaala on %5.2f kraadi Fahrenheiti skaalal\n%5.2f astmel %5.2f on %5.2f\n", nimi, celsius, fahrenheit, a, b, aste);
}


SapeR 28.10.2005 02:17

вызывает сомнение вот этот блок

int main(float argc, char *argv[]){
void prindi (float celsius, float fahrenheit, float a, float b, float aste, char nimi[20]);
float kraadid (int celsius);
float astmed(float a, float b);

попробуй перенести выделенную строку ВНИЗ блока - тогда объявления функции prindi, kraadid и astmed окажутся вне мэйна, где им собственно и место.

alexksei 28.10.2005 02:41

Цитата:

Сообщение от SapeR
вызывает сомнение вот этот блок

int main(float argc, char *argv[]){
void prindi (float celsius, float fahrenheit, float a, float b, float aste, char nimi[20]);
float kraadid (int celsius);
float astmed(float a, float b);

попробуй перенести выделенную строку ВНИЗ блока - тогда объявления функции prindi, kraadid и astmed окажутся вне мэйна, где им собственно и место.

Перенёс, всё равно таже лажа.

Цитата:

Сообщение от ЕЖ
alexksei
Бред у тебя какой-то в функции main в начале написан...

На сколько я понял всё должно выглядеть примерно так:

Твоё четтоже не помогло.

Я в программинге не очень шарю, так что офомляю всё как учат... Вро де учили так, ничего не получается.

ЕЖ 28.10.2005 09:02

alexksei
Пиши _какие_ у тебя ошибки, что происходит... Ты кстати вводишь в параметрах командной строки данные для программы? Программа берет данные именно оттуда, и если ты не задаешь их, а просто запускаешь, то конечно она будет ругаться.

Кстати в функции astmed вообще нет необходимости, она фактически меняет в main строку float aste = pow(a,b) на float aste = astmed(a,b), да плюс ещё лишняя фуцнкция. Функция prindi честно говоря тоже не имеет большого смысла, разве что для многократного её вызова с разными параметрами.

_Lynx_ 28.10.2005 11:05

Держи.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h> //не хватало
//Объявления функций естественно вынесены
void prindi (float celsius, float fahrenheit, float a, float b, float aste, char nimi[20]);
float kraadid (int celsius);
float astmed(float a, float b);

int main(int argc, char *argv[]){ //вообще-то argc это int
float celsius;
float fahrenheit;
char nimi[20];
float a,b;
float aste;
if(argc!=5){ //надо проверить всё таки
printf("Using: %s <celsius> <nimi> <a> <b>\n", argv[0]);
return 1;
}
celsius = atof(argv[1]);
strcpy(nimi, argv[2]);
fahrenheit=kraadid(celsius);
a = atof(argv[3]);
b = atof(argv[4]);
aste=astmed(a,b);
prindi(celsius,fahrenheit,a,b,aste,nimi);
system("PAUSE");
return 0;
}

float kraadid(int celsius) {
float fahrenheit;
fahrenheit=1.8*celsius+32;
return fahrenheit;
}
float astmed(float a, float b){
float aste;
aste=pow(a, b);
return aste;
}

void prindi (float celsius, float fahrenheit, float a, float b, float aste, char nimi[20]){
//celsius - float, а не int
printf("Nimi on: %s\n%5.2f kraadi Celsiuse skaala on %5.2f kraadi Fahrenheiti skaalal\n%5.2f astmel %5.2f on %5.2f\n", nimi, celsius, fahrenheit, a, b, aste);
}

alexksei 28.10.2005 22:14

Цитата:

Сообщение от ЕЖ
alexksei
Пиши _какие_ у тебя ошибки, что происходит... Ты кстати вводишь в параметрах командной строки данные для программы? Программа берет данные именно оттуда, и если ты не задаешь их, а просто запускаешь, то конечно она будет ругаться.

Кстати в функции astmed вообще нет необходимости, она фактически меняет в main строку float aste = pow(a,b) на float aste = astmed(a,b), да плюс ещё лишняя фуцнкция. Функция prindi честно говоря тоже не имеет большого смысла, разве что для многократного её вызова с разными параметрами.

Дело в том что это не я придумал так разделить, а такое задание - разделить всю программу на части, после того как сделал без разделения.

Sorry чуваки, я забыл что надо через командную строку вводить параметры. Оказывается и моя первоначальная была правильная практически. Но всё равно всем THANKS :beer:


Часовой пояс GMT +4, время: 20:15.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.