2013-03-15 63 views
1

基本上我试图从用户处获得一个字符串,格式为: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"); 
} 
+2

首先,你应该使用['fgets'(http://en.cppreference.com/w/c/io/fgets)以获取输入的来自用户的线路其次,整个字符串是以''\ 0''结尾,而不是字符串中的每个“单词”。第三,查看['strtok'](http://en.cppreference.com/w/c/string/byte/strtok)函数来分隔分隔符上的字符串。第四点,你尝试给一个字符('s [i]')分配一个字符串(例如'argv [1]')。最后,您可以直接在您读取的字符串上使用'sscanf',无需分割它。 – 2013-03-15 12:00:39

+0

'但我需要从用户那里读取字符串输入,如果他们不使用命令行 - - 那么这是什么特别是你的问题? – Mike 2013-03-15 12:01:56

+0

使用适当的字符串函数并使其与计算器一起工作 – user2173788 2013-03-15 12:05:45

回答

2

的,你应该用fgets读取输入,如gets很容易受到缓冲区溢出第一:

fgets(s, sizeof(s), stdin); 

然后,你可以简单地使用sscanf,让你的数据需求:

sscanf(s, "%d %c %d", &num1, &operator, &num2); 
相关问题