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

C语言实现Logic Gates问题:多字符输出名称打印失败求助

问题解决:多字符输出名称无法正确打印的问题

核心问题原因

  1. 数组定义错误:你把output_name、input_name_1、input_name_2定义为char [m][1],第二维度长度为1仅能存储单个字符(连字符串结束符\0都没有空间存放),无法容纳多字符名称。
  2. 打印索引逻辑错误:printf("%c ",output_name[0][i]);完全搞反了二维数组的索引关系,output_name[i]才是第i个输出对应的完整名称字符串,而非output_name[0][i]。

修正步骤

  1. 调整数组维度:将输出和输入名称的数组第二维度改为足够容纳名称的长度(比如和input_name一致设为9,题目中名称长度不会超过8字符,额外1位存结束符):
    char output_name[m][9];
    char input_name_1[m][9];
    char input_name_2[m][9];
    
  2. 修正打印语句:将字符打印改为字符串打印,直接输出完整名称:
    printf("%s ", output_name[i]);
    
  3. 修复信号长度判断:sizeof(input_signal[i])会返回数组总字节数26,实际应使用strlen(input_signal[0])获取信号的真实长度(题目中所有输入信号长度一致):
    int signal_len = strlen(input_signal[0]);
    for (int j=0; j<signal_len; j++)
    
  4. 修复输入值匹配逻辑:原代码硬编码取input_signal[0]和input_signal[1],应根据input_name_1和input_name_2动态查找对应的信号索引,避免输入数量变化时出错。

修正后的完整代码

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

// 根据输入名称查找对应的信号索引
int find_input_index(char name[9], char input_name[][9], int n) {
    for (int k=0; k<n; k++) {
        if (strcmp(name, input_name[k]) == 0) {
            return k;
        }
    }
    return -1; // 题目保证输入合法,不会触发此返回值
}

int main()
{
    int n;
    scanf("%d", &n);
    int m;
    scanf("%d", &m);
    char input_name[n][9];
    char input_signal[n][26];

    // 修正数组维度,支持多字符名称
    char output_name[m][9];
    char type[m][5];
    char input_name_1[m][9];
    char input_name_2[m][9]; 
    int input_value_store_1;
    int input_value_store_2;
    
    for (int i = 0; i < n; i++) {
        scanf("%s%s", input_name[i], input_signal[i]);
    }

    for (int i = 0; i < m; i++) {  
        scanf("%s%s%s%s", output_name[i], type[i], input_name_1[i], input_name_2[i]);
    }
    
    // 获取信号的实际长度
    int signal_len = strlen(input_signal[0]);
    
    for (int i=0; i < m; i++) {
        // 修正打印语句,输出完整名称
        printf("%s ", output_name[i]); 
        
        // 找到当前逻辑门对应的两个输入信号索引
        int idx1 = find_input_index(input_name_1[i], input_name, n);
        int idx2 = find_input_index(input_name_2[i], input_name, n);
        
        for (int j=0; j<signal_len; j++)
        {
            input_value_store_1 = (input_signal[idx1][j] == '-') ? 1 : 0;
            input_value_store_2 = (input_signal[idx2][j] == '-') ? 1 : 0;

            if (strcmp(type[i], "AND") == 0) {
                printf("%c", (input_value_store_1 && input_value_store_2) ? '-' : '_');
            } 
            else if (strcmp(type[i], "OR") == 0) {
                printf("%c", (input_value_store_1 || input_value_store_2) ? '-' : '_');
            }
            else if (strcmp(type[i], "XOR") == 0) {
                printf("%c", (input_value_store_1 != input_value_store_2) ? '-' : '_');
            }
            else if (strcmp(type[i], "NAND") == 0) {
                printf("%c", !(input_value_store_1 && input_value_store_2) ? '-' : '_');
            }
            else if (strcmp(type[i], "NOR") == 0) {
                printf("%c", !(input_value_store_1 || input_value_store_2) ? '-' : '_');
            }
            else if (strcmp(type[i], "NXOR") == 0) {
                printf("%c", (input_value_store_1 == input_value_store_2) ? '-' : '_');
            }
        }
        printf("\n");
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Blu e's

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:05:09