if statement in C



正在进行一些入门级C编程,并且遇到了这个看似非常简单的逻辑运算符的问题。如果输入姓氏Paul,则跳过第一个if语句。同时尝试在使用scanf_s时了解缓冲区大小。

int main(){
char name[25];
printf("what is your last name? ");
printf("(Please capitalize the first letter!)n");
scanf_s(" %s", name, 2); 
if ((name[0] >= 'P') && (name[0] <= 'S'))
{
printf("You must go to room 232 for your ticketsn ");
}
else
{
printf("You can get your tickets in the lobbyn");
}
return 0;
}

scanf_s(" %s", name, 2);语句中,这里的第三个参数指定要读取给定响应的字符数组(name(的大小。当您在char name[25];行中声明25的实际大小时,我不知道为什么要将2指定为该大小。

然而,对于2值,如果您键入多个字符,读取将失败(尝试仅输入"p"作为输入,您将进入if块(。

来自scanf_s(粗体矿(的文档:

缓冲区大小包括终端null。您可以使用宽度specification字段,以确保读入的令牌适合缓冲区当令牌太大而无法容纳时,不会向缓冲区,除非有宽度规范。

此外,检查scanf_s(及相关函数(的返回值以确保读取成功是一个好主意!添加一些检查,如下面的代码片段所示,将显示发生了什么,使用各种不同的输入:

//...
int n = scanf_s(" %s", name, 2);
printf("Items read = %d; Name given is: %s ...n", n, name);
//...

这样,当我输入";保罗;作为输入,我看到以下内容:

what is your last name? (Please capitalize the first letter!)
Paul
Items read = 0; Name given is:  ...
You can get your tickets in the lobby

注意:关于是否使用scanf_s代替scanf的争论(正如Microsoft编译器建议的那样(,请参阅此处:scanf和scanf_s之间的区别。

最新更新