You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

for循环中使用scanf仅首次迭代出现输入提示的问题

问题分析与解决

核心错误出在get_letters函数的scanf调用上:

  • scanf(" %c", letters[i]);中,%c格式符要求传入字符变量的内存地址,但letters[i]是char类型的具体值,不是地址。这种错误会导致scanf尝试向非法内存地址写入数据,触发未定义行为,程序执行第一次迭代后就异常退出。

修正后的代码

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void get_letters(char *letters, int number);

int main() {
    char letters[10];
    int number;
    memset(letters, '\0', 10);
    scanf("%d", &number);
    get_letters(letters, number);
    printf("%s\n", letters);
    return 0;
}

void get_letters(char *letters, int number)
{
    for (int i = 0; i < number; i++) {
        printf("bruh\n");
        // 传入字符的地址,修正非法内存访问问题
        scanf(" %c", &letters[i]);
    }
}

额外注意事项

  • 确保输入的number值不超过9(因为letters数组长度为10,需要预留一个位置给字符串结束符\0),否则会引发数组越界,同样导致未定义行为。

内容的提问来源于stack exchange,提问作者Ganz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:04:54