Я пишу одну из своих первых программ на C. Я пытаюсь изменить ранний учебник Ritchie и Kernighan по преобразованию Farhenheith и Celsius, но я получаю ошибки, которые я не могу решить.Ошибка компилятора C
Моя цель состоит в том, чтобы запустить ./a.out fahr 20
и для сценария распечатать преобразование температуры Фаренгейта, начиная с 20 (и до 300) до Цельсия.
Но если я напишу ./a.out celsius 0
, сценарий распечатает конверсию температуры Цельсия, начиная с 0 (и до 300) до Фаренгейта.
Вот текущий скрипт (а ниже - ошибки, которые я получаю от компилятора).
Я думаю, что есть много ошибок, но я только начинаю учиться и благодарен за любую помощь.
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv){
float fahr, celsius;
int upper, step;
upper = 300;
step = 20;
if (strcmp("fahr", argv[1] == 0)){
fahr = argv[2];
while (fahr <= upper){
fahr_conversion(fahr);
fahr = fahr + step;
}
}
else if (strcmp("celsius", argv[1] == 0)){
celsius = argv[2];
while (celsius <= upper){
cels_conversion(celsius);
celsius = celsius + step;
}
}
}
int fahr_conversion(float fahr){
float celsius;
celsius = (5.0/9.0) * (fahr - 32.0);
printf("%3.0f -> %6.1f\n", fahr, celsius);
}
int cels_conversion(float celsius){
float fahr;
fahr = (celsius + (9.0/5.0)) + 32.0;
printf("%3.0f -> %6.1f\n", celsius, fahr);
}
Ошибка:
Far-Cels-Converter $ cc main.c
main.c:16:21: warning: incompatible integer to pointer conversion passing 'int'
to parameter of type 'const char *' [-Wint-conversion]
if (strcmp("fahr", argv[1] == 0)){
^~~~~~~~~~~~
/usr/include/string.h:77:39: note: passing argument to parameter here
int strcmp(const char *, const char *);
^
main.c:17:8: error: assigning to 'float' from incompatible type 'char *'
fahr = argv[2];
^~~~~~~~
main.c:19:4: warning: implicit declaration of function 'fahr_conversion' is
invalid in C99 [-Wimplicit-function-declaration]
fahr_conversion(fahr);
^
main.c:23:29: warning: incompatible integer to pointer conversion passing 'int'
to parameter of type 'const char *' [-Wint-conversion]
else if (strcmp("celsius", argv[1] == 0)){
^~~~~~~~~~~~
/usr/include/string.h:77:39: note: passing argument to parameter here
int strcmp(const char *, const char *);
^
main.c:24:11: error: assigning to 'float' from incompatible type 'char *'
celsius = argv[2];
^~~~~~~~
main.c:26:4: warning: implicit declaration of function 'cels_conversion' is
invalid in C99 [-Wimplicit-function-declaration]
cels_conversion(celsius);
^
main.c:32:5: error: conflicting types for 'fahr_conversion'
int fahr_conversion(float fahr){
^
main.c:19:4: note: previous implicit declaration is here
fahr_conversion(fahr);
^
main.c:38:5: error: conflicting types for 'cels_conversion'
int cels_conversion(float celsius){
^
main.c:26:4: note: previous implicit declaration is here
cels_conversion(celsius);
^
4 warnings and 4 errors generated.
Отлично, я думаю, что я почти там: но я получаю это предупреждение : 'main.c: 21: 10: warning: неявное объявление функции 'strtof' недопустимо в C99 [-Wimplicit-function-declaration] fahr = strtof (argv [2], 0);' – Jeff
, но он все еще работает. Horray !! – Jeff
Правильно, вам нужен заголовок '' для 'strtof'. –
nemetroid