我有一个任务。用户必须以这种格式输入3个数字(x; y;z)。
X,y,z是3个用分号分隔的整数。程序像字符串一样获取它们,并将它们转换为3个独立的整数。**输入:**22; 33;55输出:数字1= 22数字2= 33数字3= 55
最好的方法是使用字符串,因为我必须验证输入的数据是否正确。
jw5wzhpr1#
简单吗?第一个
fnx2tebb2#
以下是@MarcoBonelli想法的实现:
#include <stdio.h> int main(void) { int number[3]; sscanf("22;33;55", "%d;%d;%d", number, number + 1, number + 2); printf("number 1: %d, number 2: %d, number 3: %d\n", number[0], number[1], number[2]); }
和输出:
number 1: 22, number 2: 33, number 3: 55
如果你想写一个解析器,它会更详细,但通用,易于扩展(在这个例子中解析语法:l(;l)*,其中l是长整数,;是分隔符)。它还说明了如何使用strtol():
l(;l)*
;
strtol()
#include <errno.h> #include <limits.h> #include <stdio.h> #include <stdlib.h> const char *parse_ch(const char *s, char ch) { if(!s || *s != ch) return NULL; return s+1; } const char *parse_long(const char *s, long *l) { if(!s) return NULL; char *endptr; *l = strtol(s, &endptr, 10); if((*l == LONG_MIN || *l == LONG_MAX) && errno == ERANGE) return NULL; return endptr; } int main(void) { const char *s = "22;33;55"; long l; s = parse_long(s, &l); if(!s) return 1; printf("number: %ld\n", l); for(;;) { s = parse_ch(s, ';'); if(!s) return 0; s = parse_long(s, &l); if(!s) return 1; printf("number: %ld\n", l); } }
2条答案
按热度按时间jw5wzhpr1#
简单吗?
第一个
fnx2tebb2#
以下是@MarcoBonelli想法的实现:
和输出:
如果你想写一个解析器,它会更详细,但通用,易于扩展(在这个例子中解析语法:
l(;l)*
,其中l是长整数,;
是分隔符)。它还说明了如何使用strtol()
: