Я получаю мигающий курсор вместо вывода при запуске этой программы на C в Ubuntu [закрыто]

Вот мой код для определения расстояния между двумя точками. Мое задание делает обязательным использование функций, следовательно, отдельное задание для определения расстояния. Я не получаю никаких синтаксических ошибок, а только мигающий курсор при выполнении кода. Я новичок в C.

Мой код:

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

float distance(float *x1, float *y1, float *x2, float *y2);

int main()
{ printf("Input coordinates as x1,y1,x2,y2:\n");
float x1,y1,x2,y2;
scanf("%f %f %f %f ",&x1,&y1,&x2,&y2);

printf("Coordinates are : (%f,%f) and (%f,%f)\n",x1,y1,x2,y2);
printf("%f",distance (&x1,&y1,&x2,&y2));
return 0;
}

float distance(float *x1, float *y1, float *x2, float *y2)
{  
   float d= sqrt(pow((*x1-*x2),2)+pow((*y1-*y2),2));
printf("%f", d);
return d;
}

при компиляции: gcc -o 1 1.c -lm вывод:

Input coordinates as x1,y1,x2,y2:
1 2 3 4

Вот и все. Курсор продолжает мигать, ничего не выводя.

Кроме того, я пробовал вводить операторы печати в различные моменты. Любая печать после scanf не работает.

1
задан 22 October 2018 в 08:52

2 ответа

Вопрос, который Вы задаете, не характерен для Ubuntu, но для программирования C. Я предложил бы, чтобы Вы задали такие вопросы в Stackoverflow - это для Вашего собственного преимущества, также, так как Вы достигнете другой аудитории.

Так или иначе необходимо считать на scanf () функцию, поскольку это пытается соответствовать тому, что Вы вводите на клавиатуре. Это включает любые пробелы, новые строки, и т.д. что Вы имеете в строке форматирования. Затем также необходимо закончить вход в стандарт в с "клавишей Return".

Для Вашей проблемы, изменения:

scanf("%f %f %f %f ",&x1,&y1,&x2,&y2);

кому:

scanf("%f %f %f %f",&x1,&y1,&x2,&y2);

(Удалите пространство в конце строки форматирования.) И затем это должно работать как ожидалось.

Лично, я всегда использовал scanf для чтения значения за один раз. Как показано в примере здесь. Я признаю, что это было просто моим способом избежать проблемы, которую Вы видите.

5
ответ дан 3 December 2019 в 06:24

Две вещи:

  1. gcc для компиляции, не выполняя код.
  2. -o флаг указывает название нового файла для создания. Поскольку Вы выполняете gcc и нет никаких ошибок, это означает, что это скомпилировало код C 1.c в файл 1 то, что Вы указали с -o флаг. Таким образом можно просто работать ./1 в терминале.

Обратите внимание, что использование чисел для исполняемых имен является плохой практикой и также плохим соглашением о присвоении имен. Использовать gcc -o distance -lm 1.c вместо этого, и выполненный ./distance в терминале

Обратите внимание также, что, потому что мы даем пустое название файла, оно создаст исполняемый файл в текущем рабочем каталоге. Вот почему Вам нужно ./

2
ответ дан 3 December 2019 в 06:24

Другие вопросы по тегам:

Похожие вопросы: