Разобрать строку ввода c - PullRequest
2 голосов
/ 26 марта 2012

Я хочу извлечь некоторые числа из строки ввода, которая является строкой. Строка выглядит так:

    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 ]

3 голосов
/ 26 марта 2012

Почему вы & p [1]?p - указатель на текущий токен в цикле while.Он не даст вам все элементы, которые вы ожидаете здесь.

Вы можете объявить param как массив: int param [5];

И переписать цикл следующим образом:

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

Если вы хотите использовать 5 переменных, таких как param1, param2 .... и т. Д., То вам нужно расширить цикл и написать его вручную, что не очень хорошая идея.

3 голосов
/ 26 марта 2012

Использование sscanf может быть проще:

if (strncmp(line, "command", 7) == 0)
{
    sscanf(&line[8], "%d %d %d %d %d", &param1, &param2, &param3, &param4, &param5);
}
0 голосов
/ 26 марта 2012
#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," ");
              }
       }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...