Как преобразовать температуру с помощью программы на языке C в скрипте оболочки?

Как преобразовать температуру с помощью программы на языке C в скрипте оболочки?

Это отформатированная программа на языке C, которая называется fahr_kel:


 #include <stdio.h>
 #include <stdlib.h>
 #include <iostream>
 #include <string>
 #include <vector>

 int main( int argc, char *argv[] )
 {
    if (argc < 3) 
 {
  std::cerr << "Usage:" << argv[0] << " arg1 arg2 \n"
  << "arg1 is the conversion type (1 or 2) \n "
  << "arg 2 is the temp to be converted" << std::endl;
  return 1;
 }
 // Assign the variables used in this program
 int temp, conv_temp, conv_type;

 // assign the input options to variables
 conv_type=atoi(argv[1]);
 temp=atoi(argv[2]);

 // convert the temps..
 // if the input number is 1, convert from Kelvin to Fahrenheit
 // if the input number is anything else, convert from Fahrenheit to Kelvin
 if (conv_type == 1)
 conv_temp = (((temp - 273) * 1.8) + 32);
 else  
 conv_temp = (((( temp - 32 ) * 5 ) / 9 ) + 273 );

 // print the data 
 printf ("       %3.1i                  %3.1i\n",temp,conv_temp);

 // end of main function 
 return 0;
 }

Мне нужно управлять этой программой с помощью пользовательского ввода в моем bash-скрипте.


Это файл данных, который мне нужно передать через программу на языке C под названием project3.data:

 0
 32
 100
 212
 108
 1243
 3000
 85
 22
 2388
 235

Это скрипт, который я создал и назвал project3.bash.

 #!/bin/bash
 echo -n "Convert from  kelvin to fahrenheit(1) or fahreinheit to kelvin(2)"

 read choice 

 /home/username/project3/fahr_kel [ choice project3.data ]

Я получаю только первую строку для вывода скрипта. 0 и 256

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

 ---------------------- -----------------------
 Fahrenheit Temperature Kelvin Temperature
 --------------------- -----------------------
           0                  256
 ---------------------  -----------------------
           32                 273
 ---------------------- -----------------------
          100                 310
 ---------------------- -----------------------
          212                 373
 ---------------------- -----------------------
          108                 315
 ---------------------- -----------------------
          1243                945
 ---------------------- -----------------------
          3000                1921
 ---------------------- -----------------------
           85                  302
 ---------------------- -----------------------
           22                  268
 ---------------------- -----------------------
          2388                 1581
 ---------------------- -----------------------
          235                   385
 ---------------------- -----------------------

решение1

Ваша программа C++ преобразует температуру по желанию и ожидает значение температуры в качестве второго входного аргумента. Однако ваш скрипт bash не передает температуру в качестве входного аргумента. Вместо этого он вызывает программу C++ симя файла данных как входной аргумент. Это нежелательно. Вам следует вызвать программу C++, используя сами входные значения в качестве аргумента; т. е. вам необходимо изменить скрипт bash следующим образом.

Необходимое исправление в скрипте bash — вызвать функцию c один раз для каждой строки данных и добавить необходимое форматирование. Я показываю это ниже.

#!/bin/bash

inputFile="project3.data"

echo -n "Convert from  kelvin to fahrenheit(1) or fahreinheit to kelvin(2)"

read choice 
# run the following per input data line
#./fahr_kel [ choice project3.data ]
cmd="./fahr_kel $choice "

# print header
linePrint="------------------  ----------------"
echo $linePrint
echo "Fahrenheit Temperature Kelvin Temperature"
echo $linePrint

while read inputVal
do
      $cmd $inputVal
      echo $linePrint
done < "$inputFile"
echo $linePrint

Другой способ — изменить программу на C++ так, чтобы она ожидала ввода файла вместо ввода температуры.

Связанный контент