2016-05-26 3 views
-1

Когда я запускаю программу, кажется, что sscanf хранит значения до val дважды. Я не знаю, как это исправить.sscanf() повторяющееся значение дважды

// Это мой файл array.c

#include <stdio.h> 
#include "calculate.h" 

#define SIZE 10 

int main() 
{ 
    int intArray[SIZE]; 
    char* sArray[SIZE] = {"16", "2", "6", "9", "4", "13", "1", "27", "5"}; 

    printf("Char Array to Int Array\n"); 
    formatter(*sArray, intArray, size); 

    return 0; 
} 

/* Это мой файл calculate.h */

void formatter(char* sArray, int* intArray, int size). 
#define SIZE 10 

/* */

// Отсюда calculate.c file //

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include "calculate.h" 

void formatter(char* sArray, int* intArray, int size) 
{ 
    int i, val; 
    for (i = 0; i < size; i++) 
    { 
     sscanf(sArray + i, " %d\n", &val); 
     printf("Val = %d\n", val); 
     intArray[i] = val; 
     printf("%d\n", intArray[i]); 
    } 
} 
+1

'недействительным форматтер (символ * sArray, Int * INTArray, Int размера);' -> 'недействительным форматировщик (символ * sArray [] , int * intArray, int size); ',' sscanf (sArray + i, "% d \ n", &val); '->' sscanf (sArray [i], "% d \ n", &val); ', ' formatter (* sArray, intArray, size); '->' formatter (sArray, intArray, 9); ' – BLUEPIXY

+1

Почему вы re'define'' SIZE'? – muXXmit2X

+0

'' '' 'и' '\ n" 'in 'sscanf (sArray + i,"% d \ n ", &val);' служить нецелесообразно - может отбросить эти 2 'char'. Или просто использовать' strtol() '. – chux

ответ

0

F Первым параметром formatter должно быть char *sArray[], тогда чтение должно быть sscanf(sArray[i],"%d",&val); (забудьте \n). И var не пригодится, поскольку вы можете написать прямо на него: sscanf(sArray[i],"%d",intArray+i);.

---- EDIT ----

Два исправления:

Сначала вам нужно пройти sArray по зову:

formatter(sArray, intArray, SIZE); 

Во-вторых, вы объявили SIZE быть 10, но заполните массив только 9 значениями, добавьте еще один:

char* sArray[SIZE] = {"16", "2", "6", "9", "4", "13", "1", "27", "5" ,"666"}; 
+0

Итак, теперь он компилируется, но я получаю« Ошибка сегментации (core dumped) "при запуске программы. – knfs92

+0

Теперь исправлено ... –

+0

Спасибо, Жан. Работая сейчас :) – knfs92

0

F рвый аргумент в вызове Formatter должен быть sArray, а не * sArray (если вы исправили список аргументов для форматировщика как предложил @ Жан-Батист Юнес)

1

Крайне важно, чтобы типы аргументов данных соответствуют в определении функции и вызов функции. Давайте немного упростить код для получения ответа ясно и очевидно:

#define SIZE 10 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void formatter(char* sArray[], int intArray[], int size) //argument data types in definition 
{ 
    int i, val; 
    for (i = 0; i < size; i++) { 
    sscanf(sArray[i], "%d", &val); 
    printf("Val = %d\n", val); //only for debugging, one can read directly into &intArray[i] 
    intArray[i] = val; 
    printf("%d\n", intArray[i]); 
    } 
} 

int main() 
{ 
    int intArray[SIZE]; 
    char* sArray[SIZE] = {"16", "2", "6", "9", "4", "13", "1", "27", "5"};//member missing 
    printf("Char Array to Int Array\n"); 
    formatter(sArray, intArray, SIZE - 1); //argument data types in call 
    return 0; 
} 
+0

Несомненно, спасибо за указание на мою случайную опечатку - исправлено! В другом месте я просто хотел оставаться как можно ближе к коду OP. – user3078414

Смежные вопросы