我正在完成一些在线教程。我无法弄清楚为什么IF选择语句不起作用?
#include <stdio.h>
int main(){
char namedata[50], names;
int n;
printf("Enter Number of family members being enter into program \n");
scanf("%d", &n);
for (names=0; names<n; ++names)
{
printf("Enter family member name:\n");
scanf("%s", &namedata);
printf("name:");
puts(namedata);
}
if (namedata = john)
{
prinf("john is cool");
}
return 0;
}
答案 0 :(得分:2)
您的代码中存在各种问题:
scanf
是对未定义行为的邀请,因为您不限制要读取的字符数。如果用户输入超过49个字符怎么办?scanf
。names
必须为int
。john
应为"john"
。==
,而非=
。你的编译器实际上应该抱怨!如果没有,请启用警告并使用-std=c99
(gcc)进行编译。主要问题:您无法比较C中的字符串。使用strcmp
- 仅当字符串是安全的时候,否则使用其中一个更安全的版本。
使用scanf
使用格式说明符%49s
将输入限制为有效范围。
答案 1 :(得分:0)
namedata是一个字符数组(可以称之为字符串),并将它与名为john的字符串进行比较。首先,john是一个字符串,所以你不能直接写它,它应该是: - “ “双引号,Ans其次在c中你无法比较直接有一个内置函数叫做strcmp()如果它返回0则字符串是相等的。 它需要两个字符串作为参数,你需要比较。 你可以学习更多关于它的信息 - 链接: - strcmp
%s不再使用固定大小,因此使用(“%s”,字符数组名称),而不是(“%s”,&amp;字符数组名称),不要使用&amp;运算符%s。