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

C语言程序编译报错求助:scanf格式及数组语法问题

问题分析与修复

针对你代码里的编译器报错和逻辑问题,逐个修正如下:

1. 变量声明与初始化错误

  • char letters[] = { "kamneri" };:初始化方式错误,若要存储用户输入的单词,应定义足够大的字符数组,比如char letters[8];(最长单词为7个字符,加上字符串结束符'\0'需8个位置)。
  • words[][7] = {...};:缺少类型声明,需写成char words[][8] = {...};,第二维度设为8是为了容纳7字符单词加结束符,同时必须指定char类型。
  • 变量i未声明:在main函数开头添加int i;(或在for循环内声明,需支持C99及以上标准)。

2. 输入输出错误

  • printf字符串不能直接换行,需用\n转义:修改为printf("This is the game\n Your letters are (k,a,n,m,e,r,i)\n");
  • scanf("%s", &letters):数组名letters本身就是指向首元素的指针,无需加&,正确写法为scanf("%s", letters);,且语句末尾需加分号。
  • print("Not valid value");:函数名拼写错误,应为printf。

3. 字符串比较错误

  • C语言中不能直接用==比较字符串,这只会对比指针地址。因要求仅用<stdio.h>,无法使用<string.h>的strcmp,需手动实现字符逐一对比逻辑。
  • words[][7]写法非法,必须指定具体索引,需遍历words数组的每个元素与输入值对比。

4. 逻辑逻辑调整

你的需求是输入一个单词后检查是否在words数组中,无需循环输入7次,应输入一次后遍历整个words数组匹配。


修正后的完整代码

#include<stdio.h>

int main()
{
    char letters[8];
    char words[][8] = {
        "anemik", "kameri", "marine", "minare", "makine", "anemi", "mekan",
        "krema", "kerim", "inmek", "imkan", "imren", "imran", "erkan",
        "ekran", "mera", "krem", "mine", "mira", "name", "ekim", "erik",
        "kim", "nem", "nam", "ani", "kin", "kir"
    };
    int word_count = sizeof(words) / sizeof(words[0]);
    int is_valid = 0;

    printf("This is the game\n Your letters are (k,a,n,m,e,r,i)\n");
    printf("Enter your word: ");
    scanf("%s", letters);

    // 遍历words数组检查匹配
    for(int i = 0; i < word_count; i++)
    {
        int j = 0;
        // 手动对比字符串
        while(letters[j] == words[i][j] && letters[j] != '\0' && words[i][j] != '\0')
        {
            j++;
        }
        if(letters[j] == '\0' && words[i][j] == '\0')
        {
            is_valid = 1;
            break;
        }
    }

    if(is_valid)
    {
        printf("valid value\n");
    }
    else
    {
        printf("Not valid value\n");
    }

    return 0;
}

关键说明

  • 手动字符串对比:通过循环逐个字符比较,仅当两个字符串所有字符相同且同时到达结束符时,判定为匹配。
  • 数组元素计数:用sizeof(words)/sizeof(words[0])自动获取words元素数量,避免硬编码。
  • 输入处理:scanf("%s", letters)自动读取到空格或换行,适配单个单词输入,同时确保数组大小足够避免溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:05:18