如您所见,我正在尝试检查用户输入的元素是否存在于我的数组中。但是,在声明和定义arr
的行上会发生以下错误:
1)[Error] excess elements in char array initializer
2)[Error] (near initialization for 'arr')
这是我的代码:
#include <stdio.h>
int main(){
char word;
scanf("%d",&word);
char arr[7]={"break", "case", "continue", "default", "else", "defer", "for"};
int i,n=7;
for(i=0;i<n;i++){
if(word==arr[i]){
printf("Keyword Found");
}
else{
printf("Keyword Not Found");
}
}
}
char
类型的对象的大小始终等于1
。因此,在程序中声明的此类对象名为word
char word;
不能包含字符串。字符串具有字符数组的类型。
而且这个scanf
的呼唤
scanf("%d",&word);
由于对类型为char
的对象使用了不正确的转换说明符%d
,因此没有意义并调用未定义的行为。
您需要声明一个字符数组来输入字符串,例如
char word[10];
并称scanf
喜欢
scanf("%9s", word);
数组声明也不正确。数组不包含 7 个字符。其初始值设定项是具有字符数组类型的字符串文本。
你应该写
char * arr[7]={"break", "case", "continue", "default", "else", "defer", "for"};
甚至写更好
const char * arr[7]={"break", "case", "continue", "default", "else", "defer", "for"};
要比较两个字符串,您需要使用在标头<string.h>
中声明的标准字符串函数strcmp
例如
if ( strcmp( word, arr[i] ) == 0 )
{
// two strings are equal each other
}
else
{
// two strings are unequal
}
输出消息也没有意义
printf("Keyword Not Found");
对于数组中的每个不相等字符串。
循环至少可以通过以下方式重写
int i = 0, n = 7;
while ( i < n && strcmp( word, arr[i] ) != 0 ) i++;
if ( i != n )
{
printf("Keyword Found");
}
else
{
printf("Keyword Not Found");
}
这是一个演示程序
#include <stdio.h>
#include <string.h>
int main(void)
{
const char * arr[] =
{
"break", "case", "continue", "default", "else", "defer", "for"
};
const size_t N = sizeof( arr ) / sizeof( *arr );
char word[10] = "";
scanf( "%9s", word );
size_t i = 0;
while ( i < N && strcmp( word, arr[i] ) != 0 ) i++;
if ( i != N )
{
printf( "Keyword Found at Position %zun", i );
}
else
{
puts( "Keyword Not Found" );
}
return 0;
}
例如,如果要输入字符串"continue"
则程序输出为
Keyword Found at Position 2
C 中的字符串是char
的数组,应该指定它们的最大长度。因此,字符串变量的声明应如下所示。我假设长度为 9 的字符串加上空字符