如何在C中以空格分隔的数组中输入int元素?
我一直在阅读本页关于这个问题的几个答案,但没有一个对我有用。我还读到: 我希望代码在一行中读取N个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);
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]);
}