Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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 与**字符**和**整数一起使用时作为参数的数组**_C_Arrays_String_Character_Scanf - Fatal编程技术网

C 与**字符**和**整数一起使用时作为参数的数组**

C 与**字符**和**整数一起使用时作为参数的数组**,c,arrays,string,character,scanf,C,Arrays,String,Character,Scanf,在我看来,在scanf()函数中使用数组作为带字符和整数的参数时,我遇到了一个矛盾。在Deitel和Deitel的书中,我研究了字符处理库,它介绍了当赋值时:“char word[20]”然后“scanf”(%s),word);“,这里的scanf()函数不需要和操作符。但是当分配:“int array[10]”时,当扫描来自用户的输入时,这里需要和操作符!! 有人能给我解释一下吗 char word[20]; scanf("%s", word); 它将读取用户键入的整个字符串(字符集合)。因

在我看来,在
scanf()
函数中使用数组作为带字符和整数的参数时,我遇到了一个矛盾。在Deitel和Deitel的书中,我研究了字符处理库,它介绍了当赋值时:
“char word[20]”然后
“scanf”(%s),word);“
,这里的
scanf()
函数不需要
操作符。但是当分配:
“int array[10]”
时,当扫描来自用户的输入时,这里需要
操作符!!
有人能给我解释一下吗

char word[20];
scanf("%s", word);
它将读取用户键入的整个字符串(字符集合)。因此,如果我键入“Hi”,那么
word[0]
将是
'H'
word[1]
将是
'I'

int array[10];
scanf("%d", &array[0]); // Stores the number the user typed into 'array[0]'
scanf("%d", &array[1]); // Stores the number the user typed into 'array[1]'
这里我们使用
&
,但我们也访问数组的一个元素,因为格式说明符
%d
代表一个数字

为了得到类比,考虑这个例子:

char word[20];
scanf("%c", &word[0]);
scanf("%c", &word[1]);

这里的格式说明符要求的是一个字符(而不是一组字符(即字符串))。

要记住两件事:

首先,除非它是
sizeof
或一元
&
运算符的操作数,或者是用于初始化声明中字符数组的字符串文字,否则类型为“array of
T
”的表达式将被转换(“decay”)为类型为“pointer to
T
”的表达式,表达式的值将是数组第一个元素的地址。因此,当您将数组表达式传递给函数(如
scanf
)时,函数实际接收的是指向第一个元素的指针


其次,
%s
转换说明符将读取一个字符序列,直到它看到一个空白字符或到达文件末尾,并将该序列存储到从传递的地址开始的数组中。相比之下,
%c
转换说明符仅从输入流读取单个字符并将其存储到传递的地址

请举例说明使用整数数组的
scanf
。通常是
scanf(“%d”和&array[i])
scanf(“%d”,array+i)
。。。。。。。在一个字符数组中,
%s
扫描成一个字符串,而不是一个字符,因此它使用整个数组…可能是重复的,所以这里的想法是在转换说明符中,对吗?正是@muhammadfouadalharon,欢迎使用堆栈溢出!