我在aula0602.c文件的strtoul函数中做错了一些事情,并且我无法打印这三个矩阵显然文件aula0601.h和aula0601.c是可以的,但是当我执行二进制文件时,在命令行中不会打印任何文件。
我在Linux上的bash上编写以下命令:
gcc-c-墙aula0601.c
gcc-c-墙aula0602.c
合同通用条款-o aula0602 aula0601.o aula0602.o
./aula0602 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 20 21 23 24 25 26 27
编辑:
我执行以下命令,但没有打印任何内容(我在commments空间中查看了指令)。
-->gcc-c-墙aula0601.c
-->gcc-c-墙aula0602.c
-->合同通用条款-o aula0602 aula0601.o aula0602.o
-->./aula0602 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 20 21 23 24 25 26 27
-->

/* aula0601.h */

#ifndef _AULA0601_
#define _AULA0601_ "@(#)aula0601.h $Revision$"

#define LINHAS_1                        5
#define COLUNAS_1                       3
#define LINHAS_2                        3
#define COLUNAS_2                       4

void
MultiplicarMatrizes (float [LINHAS_1][COLUNAS_1],
                     float [LINHAS_2][COLUNAS_2],
                     float [LINHAS_1][COLUNAS_2]);

#endif




/* aula0601.c */

#include "aula0601.h"

void
MultiplicarMatrizes (float matriz1 [LINHAS_1][COLUNAS_1],
                     float matriz2 [LINHAS_2][COLUNAS_2],
                     float matrizResultado [LINHAS_1][COLUNAS_2])
{

  unsigned contador1, contador2, contador3;

  for (contador1 = 0; contador1 < LINHAS_1; contador1++)
  {
    for (contador2 = 0; contador2 < COLUNAS_2; contador2++)
    {
      matrizResultado[contador1][contador2] = 0;
      for (contador3 = 0; contador3 < COLUNAS_1; contador3++)
      {
        matrizResultado[contador1][contador2] =
        matrizResultado[contador1][contador2] +
        matriz1[contador1][contador3] * matriz2 [contador3][contador2];
      }
    }
  }

}



/* aula0602.c */

#include <stdio.h>
#include <stdlib.h>
#include "aula0601.h"


#define NUMERO_DE_ARGUMENTOS                    LINHAS_1 * COLUNAS_1 + LINHAS_2 * COLUNAS_2 + 1
#define OK                                      0
#define NUMERO_DE_ARGUMENTOS_INVALIDO           1
#define ARGUMENTO_INVALIDO                      2
#define EOS                                     '\0'


void
MostrarMatriz1 (float [LINHAS_1][COLUNAS_1]);

void
MostrarMatriz2 (float [LINHAS_2][COLUNAS_2]);

void
MostrarMatrizResultado (float [LINHAS_1][COLUNAS_2]);


void
MostrarMatriz1 (float matriz1 [LINHAS_1][COLUNAS_1])
{

  unsigned linhas1, colunas1;

  printf("\n");

  for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
  {
    for (colunas1 = 0; colunas1 < COLUNAS_1; colunas1++)
      printf("%03f\t", matriz1 [linhas1][colunas1]);
    printf("\n");
  }

  printf("\n");

}

void
MostrarMatriz2 (float matriz2 [LINHAS_2][COLUNAS_2])
{

  unsigned linhas2, colunas2;

  printf("\n");

  for (linhas2 = 0; linhas2 < LINHAS_2; linhas2++)
  {
    for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
      printf("%03f\t", matriz2 [linhas2][colunas2]);
    printf("\n");
  }

  printf("\n");

}

void
MostrarMatrizResultado (float matriz1 [LINHAS_1][COLUNAS_2])
{

  unsigned linhas1, colunas2;

  printf("\n");

  for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
  {
    for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
      printf("%03f\t", matriz1 [linhas1][colunas2]);
    printf("\n");
  }

  printf("\n");

}


int
main (int argc, char *argv[])
{

  unsigned char linhas1, colunas1, linhas2, colunas2;
  float matriz1 [LINHAS_1][COLUNAS_1];
  float matriz2 [LINHAS_2][COLUNAS_2];
  float matrizResultado [LINHAS_1][COLUNAS_2];
  char *validacao;

  if (argc != NUMERO_DE_ARGUMENTOS)
  {
    printf("Número de argumentos invalido.\n");
    printf("Uso: <a11> <a12> ... <a52> <a53> <b11> <b12> ... <b33> <b34>\n");
    exit (NUMERO_DE_ARGUMENTOS_INVALIDO);
  }

  for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
  {
    for (colunas1 = 0; colunas1 < COLUNAS_1; colunas1++)
    {
      matriz1 [linhas1][colunas1] =
        (float) strtoul (argv [(linhas1 * COLUNAS_1) + colunas1 + 1], &validacao, 10);
      if (*validacao != EOS)
      {
        printf("Caractere invalido: \"%c\"\n", *validacao);
        exit(ARGUMENTO_INVALIDO);
      }
    }
  }

  for (linhas2 = 0; linhas2 < LINHAS_2; linhas2++)
  {
    for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
    {
      matriz2 [linhas2][colunas2] =
        (float) strtoul (argv [(linhas2 * COLUNAS_2) + colunas2 + 1], &validacao, 10);
      if (*validacao != EOS)
      {
        printf("Caractere invalido: \"%c\"\n", *validacao);
        exit(ARGUMENTO_INVALIDO);
      }
    }
  }

  #ifdef _MY_DEBUG_
  MostrarMatriz1 (matriz1);
  MostrarMatriz2 (matriz2);
  #endif

  MultiplicarMatrizes (matriz1, matriz2, matrizResultado);

  #ifdef _MY_DEBUG_
  MostrarMatrizResultado (matrizResultado);
  #endif

  return OK;
}

最佳答案

gcc -Wall -D _MY_DEBUG_ aula0601.c aula0602.c -o aula0602编译这些文件来定义、编译和链接似乎是可行的。
考虑使用index调用strtol以简化索引argv
这也适用于一个打印功能MostrarMatriz
aula0601.h型

#define LINHAS_1                            5
#define COLUNAS_1                           3
#define LINHAS_2                            3
#define COLUNAS_2                           4
#define NUMERO_DE_ARGUMENTOS_INVALIDO       1
#define ARGUMENTO_INVALIDO                  2
#define NUMERO_DE_ARGUMENTOS   LINHAS_1 * COLUNAS_1 + LINHAS_2 * COLUNAS_2 + 1
#define EOS                              '\0'

void
MultiplicarMatrizes (float matriz1 [LINHAS_1][COLUNAS_1],
                     float matriz2 [LINHAS_2][COLUNAS_2],
                     float matrizResultado [LINHAS_1][COLUNAS_2]);

aula0601.c公司
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aula0601.h"

void
MultiplicarMatrizes (float matriz1 [LINHAS_1][COLUNAS_1],
                     float matriz2 [LINHAS_2][COLUNAS_2],
                     float matrizResultado [LINHAS_1][COLUNAS_2])
{

    unsigned contador1, contador2, contador3;

    for (contador1 = 0; contador1 < LINHAS_1; contador1++)
    {
        for (contador2 = 0; contador2 < COLUNAS_2; contador2++)
        {
            matrizResultado[contador1][contador2] = 0;
            for (contador3 = 0; contador3 < COLUNAS_1; contador3++)
            {
                matrizResultado[contador1][contador2] =
                matrizResultado[contador1][contador2] +
                matriz1[contador1][contador3] * matriz2 [contador3][contador2];
            }
        }
    }
}

aula0602.c公司
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "aula0601.h"

void
MostrarMatriz (int linhas, int colunas, float matriz [linhas][colunas])
{
    int linhas1;
    int colunas1;

    printf("\n");
    for (linhas1 = 0; linhas1 < linhas; linhas1++)
    {
        for (colunas1 = 0; colunas1 < colunas; colunas1++)
            printf("%12.2f", matriz [linhas1][colunas1]);

        printf("\n");
    }
    printf("\n");
}

int main( int argc, char *argv[])
{
    unsigned char linhas1, colunas1, linhas2, colunas2;
    float matriz1 [LINHAS_1][COLUNAS_1];
    float matriz2 [LINHAS_2][COLUNAS_2];
    float matrizResultado [LINHAS_1][COLUNAS_2];
    char *validacao;
    int index = 1;

    if (argc != NUMERO_DE_ARGUMENTOS)
    {
        printf("Número de argumentos invalido.\n");
        printf("Uso: <a11> <a12> ... <a52> <a53> <b11> <b12> ... <b33> <b34>\n");
        exit (NUMERO_DE_ARGUMENTOS_INVALIDO);
    }

    index = 1;
    for (linhas1 = 0; linhas1 < LINHAS_1; linhas1++)
    {
        for (colunas1 = 0; colunas1 < COLUNAS_1; colunas1++)
        {
            matriz1 [linhas1][colunas1]
            = (float) strtoul (argv [index++], &validacao, 10);
            if (*validacao != EOS)
            {
                printf("Caractere invalido: \"%c\"\n", *validacao);
                exit(ARGUMENTO_INVALIDO);
            }
        }
    }

    index = ( LINHAS_1 * COLUNAS_1) + 1;
    for (linhas2 = 0; linhas2 < LINHAS_2; linhas2++)
    {
        for (colunas2 = 0; colunas2 < COLUNAS_2; colunas2++)
        {
            matriz2 [linhas2][colunas2]
            = (float) strtoul (argv [index++], &validacao, 10);
            if (*validacao != EOS)
            {
                printf("Caractere invalido: \"%c\"\n", *validacao);
                exit(ARGUMENTO_INVALIDO);
            }
        }
    }

    #ifdef _MY_DEBUG_
    MostrarMatriz ( LINHAS_1, COLUNAS_1, matriz1);
    MostrarMatriz ( LINHAS_2, COLUNAS_2, matriz2);
    #endif

    MultiplicarMatrizes ( matriz1, matriz2, matrizResultado);

    #ifdef _MY_DEBUG_
    MostrarMatriz ( LINHAS_1, COLUNAS_2, matrizResultado);
    #endif

    exit ( 0);
}

08-25 08:59