非常疑惑scanf非常害怕

img


scanf括号里第三个元素怎么详细理解?我只知道他是某种长度

choose 这个字符数组的长度
这是scanf_s特有的,目的是为了避免向choose填充结果的时候,由于数据过长,填充到数组外面,破坏别的地方的内存

长度

【以下回答由 GPT 生成】

首先,scanf函数是用来从标准输入中读取数据的函数。它的原型如下:

int scanf(const char *format, ...);

其中第一个参数format是一个格式字符串,用来指定输入的数据类型和格式。第三个参数是一个可选参数,表示读取的最大长度。

对于你的代码,scanf函数的调用应该修改如下:

scanf("%200s", choose);

这样的修改有几个原因:

  1. 第三个参数是一个可选参数,表示读取的最大长度。在你的代码中,1e是一个非法的参数,应该将最大长度直接写在格式字符串中。
  2. 你的choose数组的长度是201,在存储字符串时最大长度应该是200,以避免越界访问。

另外,你的代码中也存在一些其他问题:

  1. 在使用strcmp函数进行字符串比较时,你使用了"A"作为参数,但是字符串常量应该用双引号括起来,应该是strcmp(choose, "A")。
  2. 在for循环中使用了k作为循环变量,但是在循环结束后没有对其进行使用,可以将其改成一个更具有语义的变量名。

下面是你的代码修改之后的版本:

int main(){
    int i = 0;
    char choose[201];
    for(int round = 0; round < 3; ++round){
        printf("请选择:\nA.玩\nB.玩别的\n");
        scanf("%200s", choose);
        if(strcmp(choose, "A") == 0){
            printf("好好好好\n");
            break;
        }
        else{
            printf("继续玩\n");
        }
    }
    return 0;
}

通过上述修改,你的代码应该可以正确运行了。同时,你也应该对scanf函数的第三个参数有了更清楚的理解。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^