Калькулятор на языке С в терминале Linux?

Опять я со своим говно-кодом.
Короче, задача такова - сделать калькулятор, который может выводить ответ в двух шаблоннах:
1)a+b=c
2)с
Должно это происходить так, в терминале линукса запускаем программу и добавляем ключ в зависимости от желаемого шаблонна решения (./a.out 3+3 a например).
Я рассчитывал сделать так, чтобы программа запускалась лишь с ключом (./a.out a), а дальше уже начинался ввод данных через scanf и расчеты, на это код и написал:
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h> 

int main()
{
int l, a, b, c;
l=getchar;
char k;
    switch(l){
    	case 'a':	
		printf ("Input task: ");
		scanf ("%d%c%d", &a, &k, &b);
		if (k='+') {
		c=a+b; 
		printf ("%d%c%d = %d", &a, &k, &b, &c);
	    }
		else if (k='-') {
		c=a-b; 
		printf ("%d%c%d = %d", &a, &k, &b, &c);
	    }
		else if (k='*') {
		c=a*b; 
		printf ("%d%c%d = %d", &a, &k, &b, &c);
	    }
		else if (k='/') {
			if (b=0) {
				printf ("Error.");
				exit (1);
			}
		c=a/b; 
		printf ("%d%c%d = %d", &a, &k, &b, &c); 
		}
		case 'b':
		printf ("Input task: ");
		scanf ("%d%c%d", &a, &k, &b);
		if (k='+') {
		c=a+b; 
		printf ("%d", &c);
	    }
		else if (k='-') {
		c=a-b; 
		printf ("%d", &c);
	    }
		else if (k='*') {
		c=a*b; 
		printf ("%d", &c);
	    }
		else if (k='/') {
		if (b=0) {
			printf ("Error.");
			exit (1);
			}
		c=a/b; 
		printf ("%d", &c); 
        }
    }
}


Думаю, понятно, почему мой обоссанский код не работает.
Я не могу настроить эти самые кейсы, а точнее вызов к их исполнению.
Для этого нам сказали юзать getopt функцию. (хотя возможно с применением getopt нужно обязательно исполнять программу по виду ./a.out a+b o)
Если кто знает, как это написать, скиньте, пожалуйста.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
@vanyamba-electronics
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h> 

int main()
{
    int l, a, b, c;
    l = getchar();
    char k;
    switch(l)
    {
    case 'a':
        printf ("Input task: ");
        scanf ("%d%c%d", &a, &k, &b);
        if (k == '+') {
            c = a + b; 
            printf ("%d%c%d = %d", a, k, b, c);
        }
        else if (k == '-') {
            c = a - b; 
            printf ("%d%c%d = %d", a, k, b, c);
        }
        else if (k == '*') {
            c = a * b; 
            printf ("%d%c%d = %d", a, k, b, c);
        }
        else if (k == '/') {
            if (b == 0) {
                printf ("Error.");
                exit (1);
            }
            c = a / b; 
            printf ("%d%c%d = %d", a, k, b, c); 
        }
        break;
    case 'b':
        printf ("Input task: ");
        scanf ("%d%c%d", &a, &k, &b);
        if (k == '+') {
            c = a + b; 
            printf ("%d", c);
        }
        else if (k == '-') {
            c = a - b; 
            printf ("%d", c);
        }
        else if (k == '*') {
            c = a * b; 
            printf ("%d", c);
        }
        else if (k == '/') {
            if (b == 0) {
                printf ("Error.");
                exit (1);
            }
            c = a / b; 
            printf ("%d", c); 
        }
        break;
    }
    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы