解析输入线c

时间:2012-03-26 13:29:36

标签: c user-input

我想从输入行中提取一些数字,这是一个字符串。字符串如下所示:

    command 1 2 3 4 5

到目前为止,我已经完成了这项工作,但它无法正常工作:

   if ( strncmp(line,"command",7) == 0 ){
          char *p = strtok(line," ");
          while ( p !=NULL){
                param1 = atoi(p[1]);
                param2 = atoi(p[2]);
                param3 = atoi(p[3]);
                param4 = atoi(p[4]);
                param5 = atoi(p[5]);
                p = strtok(NULL," ");
          }
   }

我哪里错了?

3 个答案:

答案 0 :(得分:3)

使用sscanf可能更简单:

if (strncmp(line, "command", 7) == 0)
{
    sscanf(&line[8], "%d %d %d %d %d", &param1, &param2, &param3, &param4, &param5);
}

答案 1 :(得分:3)

为什么你& p [1]? p是指向while循环中当前标记的指针。它不会像你期望的那样给你所有的元素。

您可以将param声明为数组:int param [5];

并重写循环,如:

    int i=0;
    while ( p !=NULL){
                    param[i++] = atoi(p);
                    p = strtok(NULL," ");
    }

如果你想使用5个变量,比如param1,param2 ....等,你必须扩展循环并手动编写,这不是一个好主意。

答案 2 :(得分:-1)

#include <string.h>
int main(){
        char line[]="command 1 2 3 4 5";
       if ( strncmp(line,"command",7) == 0 ){
              char *p = strtok(line," ");        
              while ( p !=NULL){                
            printf("%s\n",p);
                    p = strtok(NULL," ");
              }
       }
    }