используя операторы if с параметрами командной строки в c - PullRequest
0 голосов
/ 15 февраля 2019

У меня проблемы с получением операторов if для работы с параметрами из командной строки.Я получаю сообщение об ошибке «сравнение между указателем и целым числом (« char * »и« int »)» каждый раз.Любая помощь будет оценена.Вот описание того, что я должен сделать:

Эта программа будет считывать параметр из командной строки и переводить его в название соответствующего месяца.Т.е., если вы запустите программу со следующим параметром:

Будет напечатано следующее сообщение:

Месяц 'Апрель'.

#include <stdio.h>

int main(int argc, char *argv[]) {
    if(argv[1] == 1){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}

Ответы [ 4 ]

0 голосов
/ 15 февраля 2019

Компилятор прав - вы сравниваете char * и int.

Вы должны либо конвертировать argv[1] в int (например, с strol()), либо конвертировать 1 в char * (добавив кавычки - "1"), а затем сравните с strcmp() вместо ==.

И проверка количества аргументов в argc также должна выполняться при работе с аргументами,(спасибо @Ingo Leonhardt)

0 голосов
/ 15 февраля 2019

Argv возвращает указатель на массив символов, поэтому ваша программа должна выглядеть следующим образом:

 #include <stdio.h>

    int main(int argc, char *argv[]) {
        if(argv[1][0] == '1'){
            printf("You entered the number 1.");
        } else {
            printf("You entered a different number.");
        }

        return 0;
    }

Или вы можете использовать функцию atoi (man 2 atoi) для преобразования массива ascii в int следующим образом:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
    if(atoi(argv[1]) == 1){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
} 
0 голосов
/ 15 февраля 2019

Если вы хотите использовать параметр командной строки как целое число, вы должны изменить тип с помощью atoi

#include <stdio.h>

int main(int argc, char *argv[]) {
    if(atoi(argv[1]) == 1){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}
0 голосов
/ 15 февраля 2019

Параметры, передаваемые в командной строке, являются строками, поэтому вам нужно использовать strcmp для их сравнения.

int main(int argc, char *argv[]) {
    if(argc > 1 && (strcmp(argv[1],"1") == 0)){
        printf("You entered the number 1.");
    } else {
        printf("You entered a different number.");
    }

    return 0;
}
...