正如您所看到的,我正在尝试检查用户输入的元素是否存在于数组中。但是在声明和定义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");
}
}
}
5条答案
按热度按时间piwo6bdm1#
类型为
char
的对象的大小始终等于1
。所以在程序中声明的对象名为word
不能包含字符串。字符串具有字符数组类型。
而且这个调用
scanf
没有意义,并且由于对
char
类型的对象使用了不正确的转换说明符%d
而调用了未定义的行为。您需要声明一个字符数组来输入字符串,例如
并调用
scanf
,如数组声明也不正确。数组不包含7个字符。它的初始化器是具有字符数组类型的字符串文字。
你应该写信
或者更好的是写
要比较两个字符串,您需要使用在头文件
<string.h>
中声明的标准字符串函数strcmp
,例如也没有意义输出消息
对于数组中的每个不相等的字符串。
循环至少可以按以下方式重写
这是一个演示程序
如果输入字符串
"continue"
,则程序输出为a11xaf1n2#
C中的字符串是
char
的数组,并且应该指定它们的最大长度。所以字符串变量的声明应该如下。我假设字符串长度为9加上空字符\0
。此外,字符串应该使用
string.h
库中的strcmp
函数进行比较,而不是==
。后者只比较字符串的内存地址,而strcmp
比较每个字符串的字符。进一步阅读C字符串:https://www.tutorialspoint.com/cprogramming/c_strings.htm
e37o9pze3#
你的arr是一个字符数组,而不是字符串数组。你可以使用结构的概念来创建一个字符串数组。像这样,
或者你也可以简单地创建一个二维字符数组(数组的数组)。
fv2wmkja4#
变量
arr
是一个char
的数组,但初始化列表由字符串文字数组组成。一个字符串文字可以用来初始化一个char
的数组,但这不是arr
,因此编译器产生一个关于excess elements
的错误。这些语句是有效的,因为初始化器包含单个字符串文字:或者说
将
arr
改为char
的数组的数组,代码将编译:这是7个元素,其中最长的长度为9:“继续”。请注意,这个数字是单词的8个字母,1表示空终止符(
\0
)。另一种初始化arr
的方法是:在本例中,
arr
包含7个char
指针,指向7个字符串(存在于内存中的其他位置)。以下是您的完整程序,其中包含逐行更正和建议:
请注意,为了使其工作,
word
的类型,scanf
的参数和字符串比较也发生了变化。==
比较两个指针(指向两个字符串)是否相等(换句话说,两个指针指向相同的位置),但不比较两个字符串的内容。请参阅here了解更多信息strcmp
。请注意,如果字符串相同,则返回0
。下一步骤可以是扫描关键字列表以检测是否找到匹配,并且在结尾处仅打印一个“找到/未找到”语句。这可以通过使用布尔值来完成:
ruyhziif5#
这里的错误比行数还多:
char arr[7]=
=>char *arr[7]=
1.要比较字符串,需要使用
strcmp
函数1.如果你想
scanf
字符串使用%s
说明符。1.要存储字符串,您需要
char
数组:而不是
做了