Получение сообщения об ошибке «printf. c: нет такого файла или каталога» при использовании GDB в очень базовой c C программе для преобразования температуры - PullRequest
1 голос
/ 07 апреля 2020
  • Это то, что GDB показывает мне
(gdb) break main
Breakpoint 1 at 0x722: file homework1.c, line 4.
(gdb) run
Starting program: /home/aj_the_kid/ECE_373/homework1 
Breakpoint 1, main () at homework1.c:4
4   {
(gdb) step
8     printf("Enter the temperature (for conversion) in Fahrenheit:  ");
(gdb) step
__printf (
    format=0x555555554838 "Enter the temperature (for conversion) in Fahrenheit:  ") at printf.c:28
28  printf.c: No such file or directory.
(gdb) bt
 #0  __printf (
    format=0x555555554838 "Enter the temperature (for conversion) in Fahrenheit:  ") at printf.c:28
 #1  0x0000555555554742 in main () at homework1.c:8
(gdb) next
32  in printf.c
(gdb) next
33  in printf.c
(gdb) step
_IO_vfprintf_internal (s=0x7ffff7dd0760 <_IO_2_1_stdout_>, 
    format=0x555555554838 "Enter the temperature (for conversion) in Fahrenheit:  ", ap=ap@entry=0x7fffffffde20) at vfprintf.c:1244
1244    vfprintf.c: No such file or directory.
(gdb) step
1275    in vfprintf.c
  • И это моя тестовая программа для Linux
#include <stdio.h>

int main()
{
  float temp_F, temp_C;

  // Prompt user for input (i.e. temp in Fahrenheit)
  printf("Enter the temperature (for conversion) in Fahrenheit:  ");
  scanf("%f\n", &temp_F);

  // Convert F to C
  temp_C = (temp_F - 32) * (5/9);
  printf("The temperature in Celsius is: %.2f\n", temp_C);

  return 0;

}
  • РЕДАКТИРОВАТЬ: исправлен код для поддержки арифметики с плавающей точкой c

Но проблема все еще возникает, когда требуется, чтобы я снова ввел градусы в градусах Фаренгейта в пустой строке, как если бы он не захватывал ввод пользователя в первый раз

Вид терминала

aj_the_kid@AJs-Sandbox:~/ECE_373$ rm file1
aj_the_kid@AJs-Sandbox:~/ECE_373$ gcc -g -o file1 file1.c
aj_the_kid@AJs-Sandbox:~/ECE_373$ ./file1
Enter the temperature (for conversion) in Fahrenheit:  32

32
The temperature in celcius is: 0.00
aj_the_kid@AJs-Sandbox:~/ECE_373$

1 Ответ

1 голос
/ 07 апреля 2020

Из комментариев:

Сообщение об ошибке от gdb vfprintf.c: No such file or directory связано с тем, что вы пытаетесь войти в библиотечную функцию, для которой у вас нет исходного кода.

Проблема в расчете состоит в том, что деление (5/9) выполняется как целочисленное деление. Таким образом, результат равен 0. Это можно исправить, изменив значение (5.0/9.0)

И проблема scanf связана с \n в конце строки формата. scanf немного странно с пробелами. Помещение \n в конце строки формата указывает scanf пропустить все пробелы, пока пользователь не введет непробельный символ и не нажмет ввод. Вы можете исправить это, удалив \n

...