Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中以空格分隔的数组中输入int元素?_C_Arrays - Fatal编程技术网

如何在C中以空格分隔的数组中输入int元素?

如何在C中以空格分隔的数组中输入int元素?,c,arrays,C,Arrays,我一直在阅读本页关于这个问题的几个答案,但没有一个对我有用。我还读到: 我希望代码在一行中读取N个INT值,然后将其存储在数组中 到目前为止,我做了以下工作: int main() { int n; char arr[n]; int arrInt[n]; const char s[2] = " "; char* token; int i = 0; scanf("%n", &n);

我一直在阅读本页关于这个问题的几个答案,但没有一个对我有用。我还读到:

我希望代码在一行中读取N个INT值,然后将其存储在数组中

到目前为止,我做了以下工作:

int main() {
 
    int n; 
    char arr[n];
    int arrInt[n];
    const char s[2] = " ";
    char* token;
    int i = 0;

    scanf("%n", &n);
    scanf("%c", arr);    
    token = strtok(arr, s);

    while (token != NULL)
    {
        arrInt[i] = atoi(token);
        i++;
        token = strtok(NULL, s);
    }
}

因为问题说数字是用空格分隔的,所以实现这一点的方法之一是使用以下方法

 int main() {
    int n;
    scanf("%d",&n);
    int arr[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }

    //for checking 
    for(int i=0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
}


我认为您在编写代码时遗漏了一些要点

char arr[n];
int arrInt[n];
C标准不能以这种方式定义数组。这是一项由标准删除,但由编译器作为扩展提供的服务。这就是所谓的VLA

使用此用法,您只能获得一个字符。不能在数组中保留字符串。如果要在数组中保留字符串,可以查看以下代码


char* sgets(char *p)
{
    char *pret = p;
    int c;

    while ((c = getchar()) != '\n' && c != EOF)
        *p++ = (char)c;
    *p = '\0';

    return pret;
}
我编写了这样的代码,以便您可以保留字符串:

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

int main()
{
    char arr[] = "Hi Hello How Where";

    char *token = strtok(arr, " ");
    char **d_arr = malloc(sizeof(char *) * 1);
    d_arr[0] = token;
    
    int count = 1;
    while (token != NULL)
    {
        token = strtok(NULL, " ");
        d_arr = realloc(d_arr, sizeof(char *) * (count + 1));
        d_arr[count++] = token;
    }

    for(int i = 0; i < count-1; ++i)
        printf("%s ", d_arr[i]);
}

我误解了这个问题。我希望我写的东西能有所帮助

n未初始化,因此导致arr和arrInt声明的行为未定义。如果您需要进一步的帮助,请描述您遇到的实际错误或错误行为。scanf%n,&n;为什么是%n?在声明char arr[n];%c只读取一个字符。所以那不可能是你想要的。请改用fgets。@jxvi您能上传一个输入示例吗?这通常是检查scanf返回值的好方法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char arr[] = "Hi Hello How Where";

    char *token = strtok(arr, " ");
    char **d_arr = malloc(sizeof(char *) * 1);
    d_arr[0] = token;
    
    int count = 1;
    while (token != NULL)
    {
        token = strtok(NULL, " ");
        d_arr = realloc(d_arr, sizeof(char *) * (count + 1));
        d_arr[count++] = token;
    }

    for(int i = 0; i < count-1; ++i)
        printf("%s ", d_arr[i]);
}