它打印正确,但是我感到困惑的是,每当我写msg时,它就会给我你的@@,而每当我写msg [option-1]时,它就会给我完整消息您的名字是bilal。我不了解[option-1]的原因。为什么使用它,它的作用是什么?
#include <stdio.h>
#define MAX_LEN 256
int main(){
FILE * fp = fopen("file.txt","r");
int option;
char word[MAX_LEN];
static const char * const msg[] = {
"Name",
"Date of Birth",
"ID Card Number",
"Phone Number",
"Address",
"Account",
"Fixing Year",
"Amount" };
for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
printf("%d. Your %s:\n", option, msg[option-1]);
fclose(fp);
return 0;
}
转换说明符%s
设计为输出字符串。它需要一个类型为char *
的参数。
[msg
数组的声明类似于
static const char * const msg[] = {
//...
即其元素的类型为char *
。表达式中使用的数组本身的类型为char **
。
访问数组的元素的索引的有效范围是[ 0, sizeod( msg ) / sizeof( char * ) )
在此循环中
for (option = 1; option <= sizeof(msg)/sizeof(char *); ++option)
索引从1开始。因此,要正确输出数组的元素,必须使用表达式option - 1
作为索引,并且表达式msg [option-1]具有转换所需的类型char *
prontf的调用说明符。
printf("%d. Your %s:\n", option, msg[option-1]);
即输出从数组字符串中选择的内容。