В основном я пытаюсь получить строку от пользователя в форме: 3 + 2, как одна строка, проверить компоненты строки индивидуально и выполнить расчет. У меня уже есть программа калькулятора, работающая с вводом командной строки, но мне нужно получить и прочитать строковый ввод от пользователя, если они не используют командную строкучтение строки ввода для калькулятора в C
Это то, что у меня есть до сих пор. Пожалуйста hellppp :(
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
int num1, num2;
float ans;
char operator;
int i = 0, j = 0;
char s[100] = " ";
char s1[100], s2[100];
if (argc==4) {
sscanf(argv[1], "%d", &num1);
sscanf(argv[2], "%c", &operator);
sscanf(argv[3], "%d", &num2);
switch (operator) {
case '+': ans = num1+num2;
printf("%d %c %d = %.2f\n", num1, operator, num2, ans);
break;
case '-': ans = num1-num2;
printf("%d %c %d = %.2f\n", num1, operator, num2, ans);
break;
case 'x':
case 'X': ans = num1*num2;
printf("%d %c %d = %.2f\n", num1, operator, num2, ans);
break;
case '^': ans = pow(num1, num2);
printf("%d %c %d = %.2f\n", num1, operator, num2, ans);
break;
case '/': if (num2 == 0) {
printf("Error! Division by Zero!\n");
}
else {
ans = num1/num2;
printf("%d %c %d = %.2f\n", num1, operator, num2, ans);
}
break;
default: printf("%c is not a valid operator!\n", operator);
}}
else
if (argc==3) {
sscanf(argv[1], "%c", &operator);
sscanf(argv[2], "%d", &num1);
switch (operator) {
case 'n':
case 'N': ans = -num1;
printf("-(%d) = %.2f\n", num1, ans);
break;
case 'a':
case 'A': ans = fabs(num1);
printf("|%d| = %.2f\n", num1, ans);
break;
case 's':
case 'S': if (num1 < 0) {
printf("Can't find square root of negative number\n");
}
else {
ans = sqrt(num1);
printf("Sqrt(%d) = %.2f\n", num1, ans);
}
break;
default: printf("%c is not a valid operator!\n", operator);
} }
else if ((argc!=3) || (argc!=4)) {
printf("Enter the string you want to calculate: ");
gets(s);
while (s[i] != '\0') {
s[i] = argv[1];
i++;
}
while
(s[i] != '\0') {
s[i] = argv[2];
i++;
}
while
(s[i] != '\0') {
s[i] = argv[3];
i++;
}}
}
else
printf("Input Error!!!\n");
}
Во-первых, вы должны использовать [ 'fgets'] (http://en.cppreference.com/w/c/io/fgets), чтобы получить строку ввода от пользователя Во-вторых, вся строка завершено '' \ 0'', а не каждое «слово» в строке. В-третьих, найдите функцию ['strtok'] (http://en.cppreference.com/w/c/string/byte/strtok), чтобы разделить строку на разделителе. В пункте четыре вы пытаетесь присвоить строку (например, 'argv [1]') символу ('s [i]'). И, наконец, вы можете фактически использовать 'sscanf' в строке, которую вы читаете напрямую, не нужно разделить ее. –
'но мне нужно получить и прочитать строковый ввод от пользователя, если они не используют командную строку' - так что же это конкретно ваша проблема? – Mike
с использованием соответствующих строковых функций и обеспечения работы с калькулятором – user2173788