sscanf()重复两次值

时间:2016-05-26 15:28:21

标签: c scanf

当我运行程序时,似乎sscanf将值存储到val两次。我不知道如何解决它。

//这是我的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

/ * * /

//从这里计算.c文件//

#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]);
    }
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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"};

答案 2 :(得分:0)

调用formatter的第一个参数应该是sArray,而不是* sArray(假设您按照@ Jean-BaptisteYuès的建议修改了格式化程序的参数列表)