基本上,我希望用户输入以下内容:
h X,Y(例如h 5,20)[正是这种格式,h然后是空格,然后是整数,然后是逗号,然后是整数)
到目前为止,我已经创建了这段代码:
char input[5]; scanf("%[^\n]%*c", input); while ((input[0] != 'h' && input[0] != 'H') || (input[1] != ' ') || (isdigit(input[2] == 0) || (input[3] != ',') || (isdigit(input[4]) == 0) scanf("%[^\n]%*c", input);
如果我现在想获取数字,我就这样做:输入[2]-'0'并获取它。
现在的问题是,如果数字是两位数,我不知道该怎么办。就像,如果用户输入h 10,10
我如何获得价值?另外,除了将数组从input [5]更改为input [7]之外,我还需要做什么?
答案 0 :(得分:0)
%n
可用于计算已处理的字符。这样可以检测输入中的空格数或缺少空格。
#include <stdio.h>
int main( void) {
char line[100] = "";
char h = 0;
int first = 0;
int second = 0;
int firstspace = 0;
int aftercomma = 0;
int beforeint = 0;
while ( fgets ( line, sizeof line, stdin)) {
if ( 3 == sscanf ( line, "%c %n%d,%n %n%d"
, &h, &firstspace, &first, &aftercomma, &beforeint, &second)) {
if ( h != 'h' && h != 'H') {
fprintf ( stderr, "first character must be h or H\n");
continue;
}
if ( firstspace != 2) {
fprintf ( stderr, "one space must follow h/H\n");
continue;
}
if ( beforeint - aftercomma != 0) {
fprintf ( stderr, "invalid space after comma\n");
continue;
}
printf ( "input success:\t%c %d %d\n", h, first, second);
break;
}
else {
fprintf ( stderr, "format: h/H int,int\n");
}
}
return 0;
}