Критика нужна: желательно объективно и без перехода на личности.
Отредактировано с учетом комментариев ниже! Еще раз отредактировано с учетом комментариев ниже! Спасибо всем за помощь, друзья!
C проверкой на знак - отрицания. Посл. вариант: True
/*Данная программа сравнивает две строки, содержащие числа (только).
Возвращает A > B, A < B или A = B, коды 1, -1 и 0. Ответ 3 - неправильный ввод
или отсутствие аргументов.
This program compares two strings, which contains numbers (only).
It returns: A > B, A < B or A = B, codes 1, -1 and 0. Code 3 - incorrect or empty input.
*/
#include <stdio.h>
/*Функция печати результата*/
int ret(int r) {
/*Если нужен код ответа (например, для PHP), раскомментируйте строку ниже*/
//printf("%d", r);
/*Коды ответов и вывод на экран сообщений*/
switch ( r ) {
case 1:
printf("A > B\n");
break;
case -1:
printf("A < B\n");
break;
case 0:
printf("A = B\n");
break;
case 3:
printf("Перезапустите с двумя аргументами так: программа 123 321\n");
break;
}
return r;
}
//Функция конвертации аргумента в целое
int convert_to_int(char * ar1, int i) {
int a = 0;
for (i; ar1[i]; i++) a = a * 10 + (ar1[i] - '0');
return a;
}
int main(int argc, char * argv[]) {
/*Проверим ввод аргументов*/
if (argc != 3) return ret(3);
/*Проверим знаки - если один с минусом, другой нет (и обратно)*/
if (argv[1][0] == '-' && argv[2][0] != '-') return ret(-1);
if (argv[2][0] == '-' && argv[1][0] != '-') return ret(1);
int i = 0;
/*Если оба аргумента без знаков минус. Достаточно проверить один*/
if (argv[1][0] != '-') {
if (convert_to_int(argv[1], 0) > convert_to_int(argv[2], 0)) return ret(1);
if (convert_to_int(argv[1], 0) < convert_to_int(argv[2], 0)) return ret(-1);
}
/*Если с минусами*/
else {
if (convert_to_int(argv[1], 1) > convert_to_int(argv[2], 1)) return ret(-1);
if (convert_to_int(argv[1], 1) < convert_to_int(argv[2], 1)) return ret(1);
}
/*Если равны*/
return ret(0);
}