当我运行程序时,似乎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]);
}
}
答案 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的建议修改了格式化程序的参数列表)