下面是我如何同时定义和赋值字符串数组
#include <stdio.h>
#include <cs50.h>
#include <string.h>
int main()
{
string word = get_string("Enter a Word;");
for(int i = 0; i<strlen(word); i++)
{
printf("%c\n",word[i]);
}
}
现在,我想应用相同的技术从user中获取整数值
#include <stdio.h>
#include <cs50.h>
int main()
{
int scores[] = get_int("Enter score:");
int len = sizeof(scores)/sizeof(int);
for(int i = 0; i<len; i++)
{
printf("%i\n", scores[i]);
}
}
但是代码没有被编译,编译器是这样说的:
IntArray.c:5:9: error: array initializer must be an initializer list or wide string literal
int scores[] = get_int("Enter integer:");
^
1 error generated.
make: *** [<builtin>: IntArray] Error 1
我知道我们有一个for循环来处理这个问题,它是这样的:这就是为什么我必须继续使用for循环,它看起来像这样:
#include <stdio.h>
#include <cs50.h>
int main()
{
int scores[3];
for(int I = 0; I<3; I++)
{
score[I] = get_int("Enter score: ");
}
for(int j =0; j<3; j++)
{
printf("%I\n", scores[j]);
}
}
我的问题是我可以同时定义和赋值整型数组吗?
我试图像处理单个字符串一样,同时定义和赋值整型数组,但我做不到。
3条答案
按热度按时间pengsaosao1#
我可以像定义字符串数组那样同时定义和赋值整型数组吗?
string word
是不是数组。该对象是CS50类型string
,它是一个指针,指向char
数组。数组不是指针。
指针不是数组。
代码可以创建类似的代码来定义
int
指针......并使用一个特殊的值,如
INT_MIN
,来表示int
s数组的结尾。当然,INT_MIN
不能作为一个可读取的值。这类似于C * strings *,它使用一个特殊的值,即 * null字符 * 来表示数组的结尾。我的问题是我可以同时定义和赋值整型数组吗?
是的。
见@M. M评论。
这要求在获取数据之前确定数组大小。
代码可以将
int
读取到某个数据集合中,然后使用int
计数来定义一个 * 可变长度数组 *(VLA)。但是VLA可能不会被初始化。它们可以稍后被赋值。wyyhbhjk2#
在earlier answer的基础上,函数 *read_int * 读取整数,直到读取到 end_of_list,然后返回。
5vf7fwbs3#
下面是我如何同时定义和赋值字符串数组
此语句不正确。在行中
变量
word
不是数组。特别是,数据类型string
不是数组,而是数组的引用("指针")。你将在week 4 of CS50中学习这一点。实际上,函数
get_string
根据用户输入创建了一个数组,并返回了一个对这个新创建的数组的引用,然后将这个引用存储在变量word
中,所以你创建的是引用的副本,而不是数组本身的副本。下面是一个用于演示的示例程序:
在上面的程序中,如果用户输入
Test
,则行将不会复制包含字符
Test
的数组,而只是复制对该数组的引用。之后,将有两个变量引用同一数组。如果随后使用修改数组的第一个字符
您将修改
word1
和word2
引用的数组。因此,将不输出原始输入
Test
,但两者都将输出Jest
。由于这个原因,你的问题有一半是没有意义的,因为初始化数组不能与初始化数组的引用("指针")相比。
我的问题是我可以同时定义和赋值整型数组吗?
这条线
不会起作用。
另一方面,
将工作,但这可能不是您想要的,因为它将只创建一个大小为
1
的数组,并且调用函数get_int
将只要求用户提供一个int
。如果你想让用户输入几个
int
值,那么你必须多次调用函数get_int
,例如:然而,这种解决方案并不理想,特别是如果您以后想要将程序更改为具有3个以上的输入。因此,在声明中不初始化数组,而是使用循环(就像您在上一个代码片段中所做的那样)可能是更好的解决方案。