Разделить строку на разные переменные - PullRequest
0 голосов
/ 02 апреля 2011

Эй, ребята! Я новичок в C, поэтому я хотел бы помочь в одной проблеме. Я должен отделить строку и поместить его в разные переменные. Представьте, что Sol 3 5 приведет к чему-то вроде:

var1=Sol  
var2=3  
var3=5 

Я пытался использовать scanf, но он остановился в первом пробеле: /.
Заранее спасибо!
Ура!

РЕДАКТИРОВАТЬ: это не моя домашняя работа, я просто практикуюсь, но я действительно хочу сейчас, как я могу это сделать :). Код у меня сейчас такой:

int main () {  
    char var1[10],var2[10],var3[10],func;  
    fgets(func, 20, stdin);   
    fscanf(func,"%s %d %d", var1,var2,var3);  
    printf("%s %d %d", var1,var2,var3);  
    return 0;  
}

Ответы [ 3 ]

3 голосов
/ 02 апреля 2011

После редактирования и выложенного кода

Ваша проблема в том, что вы лжете компилятору. Не делай этого. Это не нравится :) 1003 *

Вы просите, чтобы компилятор прочитал строку и 2 целых числа ... но затем велели ему поместить результаты в массивы символов (корректно только для первого преобразования)

             /* char[] but %d wants pointer to int */
    fscanf(func,"%s %d %d", var1,var2,var3);
                         /* all var1, var2, and var3 are arrays of char! */

Попробуйте объявить переменные как

    char var1[10];
    int var2,var3;

Oh! func объявлен как обычный символ. Вы, вероятно, хотите что-то еще.

После того, как вы объявите свои переменные таким образом, вам нужно изменить scanf вызовом pass адрес адресов int, а не их (неинициализированных) значений.

3 голосов
/ 02 апреля 2011

strtok - это необходимая вам функция:

 #include <string.h>

 char* str = "Sol 3 5";
 char* ptr;
 char* saved;
 ptr = strtok_r(str, " ", &saved);
 while (ptr != NULL)
 {
   printf("%s\n", ptr);
   p = strtok_r(NULL, " ", &saved);
 }

Просто примечание: эта функция изменяет исходную строку, помещая маркеры конца строки (нули, \0) вместо разделителей.

Хорошо scanf было бы хорошо в любом случае, но я не буду помогать вам, если вы не укажете четко, если это домашнее задание ..

0 голосов
/ 02 апреля 2011

Существует функция, аналогичная scanf, которая называется sscanf. Он работает точно так же, но читает значения из строки, а не из файла:

sscanf("Sol 3 5", "%s%d%d", v1, &v2, &v3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...