在C中读取不同数量的参数
输入将如下所示:在C中读取不同数量的参数,c,parameters,logic,scanf,C,Parameters,Logic,Scanf,输入将如下所示: AND 1 0 2 OR 3 1 4 XOR 5 1 3 ENEE140 10 7 8 9 NOT 6 11 其中每行中的第一个参数是逻辑运算符,后面的数字是门。我想知道读取这些参数的最佳方式是什么,因为我不能只scanf(“%s%d%d%d”),因为有些运算符(ENEE140)有3个以上的整数参数(它有4个)。将空格替换为null。然后,这些可以看作是单独的字符串。 类似于(假设输入行称为char*input): #包括 #包括 int main() { 字符输入[100
AND 1 0 2
OR 3 1 4
XOR 5 1 3
ENEE140 10 7 8 9
NOT 6 11
其中每行中的第一个参数是逻辑运算符,后面的数字是门。我想知道读取这些参数的最佳方式是什么,因为我不能只
scanf(“%s%d%d%d”)
,因为有些运算符(ENEE140)有3个以上的整数参数(它有4个)。将空格替换为null。然后,这些可以看作是单独的字符串。
类似于(假设输入行称为char*input):
#包括
#包括
int main()
{
字符输入[1000];
printf(“输入行,或完成后按return\n”);
对于(;;)
{
fgets(输入,999,标准输入);
如果(*输入=='\n')
打破
char*begin=输入;
字符*结束=输入;
//记住字符串的起点和终点
而(*结束)+结束;
//将空格替换为空
对于(;*begin;++begin){
如果(*开始=“”){
*开始=0;
}
}
//现在分析每个字符串
用于(开始=输入;开始<结束;++开始){
如果(开始==输入){
printf(“命令:%s\n”,开始);
}否则{
int值=atoi(开始);
printf(“值:%d\n”,值);
}
while(*开始){
++begin;//跳到null
}
}
}
}
将空格替换为null。然后,这些可以看作是单独的字符串。
类似于(假设输入行称为char*input):
#包括
#包括
int main()
{
字符输入[1000];
printf(“输入行,或完成后按return\n”);
对于(;;)
{
fgets(输入,999,标准输入);
如果(*输入=='\n')
打破
char*begin=输入;
字符*结束=输入;
//记住字符串的起点和终点
而(*结束)+结束;
//将空格替换为空
对于(;*begin;++begin){
如果(*开始=“”){
*开始=0;
}
}
//现在分析每个字符串
用于(开始=输入;开始<结束;++开始){
如果(开始==输入){
printf(“命令:%s\n”,开始);
}否则{
int值=atoi(开始);
printf(“值:%d\n”,值);
}
while(*开始){
++begin;//跳到null
}
}
}
}
将整行读取为字符串,然后从中读取操作码和操作数(这是一个简单的解析案例)。查看用于拆分字符串的strtok*
函数。您可以使用基于第一个字符的开关格和3个不同的scanf
调用扫描2、3或4个数字。我忘了提到,我们的教授不允许我们使用string.h库中的任何内容,因为这是一个介绍类,他不希望我们中的任何人有任何“优势”。不过,切换案例听起来是可行的,所以我将尝试一下。非常感谢!您仍然应该使用字符串解析方法。编写这些字符串操作是学习编程的一个很好的方法。将整行作为字符串读取,然后从中读取操作码和操作数(这是一个简单的解析示例)。查看strtok*
函数以分割字符串。您可以使用基于第一个字符的开关盒和3个不同的scanf
调用扫描2、3或4个数字谢谢。我忘了提到,我们的教授不允许我们使用string.h库中的任何内容,因为这是一个介绍类,他不希望我们中的任何人有任何“优势”。不过,切换案例听起来是可行的,所以我将尝试一下。非常感谢!您仍然应该使用字符串解析方法。编写这些字符串操作是学习编程的一个很好的方法。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char input[1000];
printf("Enter line, or press return when finished\n");
for(;;)
{
fgets(input, 999, stdin);
if (*input == '\n')
break;
char *begin = input;
char *end = input;
// remember string begin and end points
while (*end) ++end;
// replace spaces with null
for (;*begin;++begin) {
if (*begin == ' ') {
*begin = 0;
}
}
// Now parse each string
for (begin = input; begin < end; ++begin) {
if (begin == input) {
printf("Command: %s\n", begin);
} else {
int value = atoi(begin);
printf("Value: %d\n", value);
}
while (*begin) {
++begin; // skip to null
}
}
}
}