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 ofT
”的表达式将被转换(“decay”)为类型为“pointer toT
”的表达式,表达式的值将是数组第一个元素的地址。因此,当您将数组表达式传递给函数(如scanf
)时,函数实际接收的是指向第一个元素的指针
其次,%s
转换说明符将读取一个字符序列,直到它看到一个空白字符或到达文件末尾,并将该序列存储到从传递的地址开始的数组中。相比之下,%c
转换说明符仅从输入流读取单个字符并将其存储到传递的地址 请举例说明使用整数数组的scanf
。通常是scanf(“%d”和&array[i])
或scanf(“%d”,array+i)
。。。。。。。在一个字符数组中,%s
扫描成一个字符串,而不是一个字符,因此它使用整个数组…可能是重复的,所以这里的想法是在转换说明符中,对吗?正是@muhammadfouadalharon,欢迎使用堆栈溢出!