这个简单计算器的操作列表是:
正弦(S),余弦(N),正切(T),指数(E) 功率(W),绝对值(A),阶乘(F) 加(+),减( - ),除(/),乘(*),模(%) 退出(Q)
因此,例如,应用程序将如下所示:
输入用户输入:30
输入用户输入:S
Sin(30)= 0.5
我需要从用户那里获取输入,并允许他们输入整数或字母。我怎样才能做到这一点。我可以同时获得一个整数和一个字母吗?
答案 0 :(得分:0)
你应该在输入时验证用户输入,你可以通过验证输入的ASCII值来做到这一点。一种方法是以字符串的形式获取输入,然后将其解析为令牌。
答案 1 :(得分:0)
一种方法是将scanf
与%s
或fgets
一起使用。
使用fgets
获取输入:
fgets(buffer,sizeof(buffer),stdin);
请注意,fgets
包含\n
中的buffer
字符。您可能需要将其删除。
使用buffer
等功能解析sscanf
。此函数返回从缓冲区成功提取的项目数:
if(sscanf(buffer,"%d",&num)==1) //Try to extract a number
//Extraction successful!
否则,请检查buffer
(buffer[0]
)的第一个字符是否为有效字符。可以进行检查以测试buffer
的长度。
答案 2 :(得分:0)
你可以驯服strtol
:它有输出参数endptr,如果成功解析整数,它将被设置为行尾。其余代码已由@CoolGuy解释。
#include <stdio.h>
#include <string.h>
#define MAXINPUTLEN 32
int main() {
char input[MAXINPUTLEN];
char* eol;
char* end;
long l1;
do {
fputs("Enter user input: ", stdout);
if(fgets(input, MAXINPUTLEN, stdin) == NULL)
break;
/* User entered empty string, exit the loop */
if(input[0] == '\n')
break;
eol = strchr(input, '\n');
if(eol == NULL) {
/* Input string is too long, warn user, ignore the rest, and retry */
fputs("Input is too long and may be truncated, please retry!\n", stderr);
while(fgetc(stdin) != '\n');
continue;
}
/* Remove newline character (should be the last) */
*eol = '\0';
l1 = strtol(input, &end, 10);
if(end == eol) {
/* User entered integer */
printf("You have entered an integer: %ld\n", l1);
}
else {
/* User entered a string */
printf("You have entered a string: %s\n", input);
}
/* Read input unless user do not input an empty string */
} while(input[0] != '\n');
}