我想从用户那里得到一个输入,如(4,5)。但我只是想得到整数值。(4和5)我为此写了一个代码。但它没有用。我怎么能解决问题。
int x, y;
int c;
c = getchar();
while (c != EOF) {
while (c != '(' && c != EOF) {
c = getchar();
}
while (c != ',' && c != EOF) {
c = getchar();
}
x = c;
while (c != ',' && c != EOF) {
c = getchar();
}
while (c != ')' && c != EOF) {
c = getchar();
}
y = c;
}
我得到输入(1,4)。输出是x= 44
和y= 45
?
答案 0 :(得分:1)
找到左括号后,读取数字时的字符(例如isdigit
),然后创建数字。
当字符不是数字时,请确保它是逗号。如果是,你读取与上面相同的下一个数字。最后确保你得到右括号。
以上假设括号和数字之间或数字或逗号之间没有空格。这些可以通过循环和isspace
来处理。
至于将数字转换为数字,假设您的系统正在使用ASCII encoding(这是现代PC类系统的标准配置),那么这很简单,因为您只需从字符中减去'0'
即可获得数字(请参阅链接ASCII table以帮助您了解原因)。将值存储在变量中,初始化为零,并根据需要乘以10。
根据您正在编写的解析器,您可以在解析器而不是词法分析器中处理和识别元组。这将使其更加灵活。
答案 1 :(得分:0)
按照你的代码流程x值将是字符逗号。 int c,x,y; c = getchar(); 而(c!= EOF){
while (c != '(' && c != EOF) {
c = getchar();
}
c = getchar();
x = c;
while (c != ',' && c != EOF) {
c = getchar();
}
/*x = c;
while (c != ',' && c != EOF) {
c = getchar();
}
*/
c = getchar();
y = c;
while (c != ')' && c != EOF) {
c = getchar();
}
//y = c;
printf("x = %c ,y = %c ",x,y);
}