чтение чисел с использованием строк - PullRequest
0 голосов
/ 30 октября 2009

Мне нужно закодировать функцию, которая будет принимать х чисел. (x считывается в функцию в качестве аргумента) Перед числами может стоять любое число пробелов и новых строк, а после ввода последнего номера символ новой строки завершает сканирование. Я думал об использовании строк в символах взятия и игнорировании любых не числовых символов. Когда вводится числовой символ, он будет считан в строку, а также любые последующие числовые символы. Когда после числа вводится пробел или новая строка, я хочу, чтобы число в строке вводилось в массив.

Поэтому, если строка содержит {'1', '3', '2'}, я хочу поместить значение «132» в ячейку массива.

Я установлю счетчик для подсчета, когда число помещено в массив, и когда будет достигнуто необходимое количество чисел, функция вернется.

Вот что у меня есть:

    void read_vector(int* v, int n)
    {
        int value, i = 0, j = 0, k;
        char num, str[9];

        do 
        {
            num = getchar();

            if (num > 47 && num < 58) 
            {
                while (i < 10) 
                {    
                    str[i] = num;
                    i++;
                    num = getchar();

                   if (i = 9 || num < 47 || num > 58) 
                   {
                       str[i] = '\0'
                       j++;

                       for(k = 1; k <= strlen(str); k++) 
                       {
                           value += str[k - 1] * pow(10, (strlen(str) - k));
                       }

                       v[j] = value

                       if(j = n)
                           return;
                   }
               }
           }
       } 

       while (1);
   }

Спасибо

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

Я бы использовал члена семейства scanf в зависимости от того, как представлен ваш ввод. fscanf () выполняет почти все, что вы просите.

1 голос
/ 31 октября 2009

Я бы рекомендовал использовать strtok() для разделения строки на токены, а atoi(), atol() или atof() для преобразования текста в числа. Например:

void
read_nums(int count, double *buffer, char *str)
{
    int i;
    char *str2;

    // Read the first token
    str2 = strtok(srt, " \n\t\r");

    for (i = 0; i < count;) {
        if (*str2)
            // Convert and store the number
            buffer[i++] = atof(str2);

        // Read the next token
        str2 = strtok(NULL, " \n\t\r");
    }
}

Я бы порекомендовал вам найти хорошую документацию по этим функциям, чтобы точно узнать, как ее реализовать (я никогда не проверял этот пример, и он не проверяет правильность.)

0 голосов
/ 30 октября 2009

Прежде всего, вы, кажется, немного запутались в использовании операторов сравнения в C. Проверьте сравнение и логические операторы в C

Прямо сейчас ваши ifs не будут делать то, что вы ожидаете от них

И не для того, чтобы быть придирчивым или чем-то еще, но ваш первый цикл , в то время как , вероятно, будет лучше соответствовать вашим потребностям, как цикл для , так как вам все равно нужен счетчик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...