【问题标题】:How to know what's wrong this code, as it does not output anything?如何知道这段代码出了什么问题,因为它没有输出任何东西?
【发布时间】:2021-11-13 04:53:02
【问题描述】:

我对 stackoverflow 和编码还很陌生,所以我现在不知道该怎么做。正如图块所述,此代码不输出任何内容。它只运行,但没有输出。我现在不知道该怎么办。我正在使用带有 g++ 的 Visual Studio Code。是的,我检查了输入文件是否正确放置。可能是什么问题?

#include <iostream>
#include <fstream>      
using namespace std;
const int NR = 10;
const int NC = 5;
int getTotal(int arr[NR][NC]);
float getAverage (int arr[NR][NC]);
int rowTotal (int arr[NR][NC], int numOfRow);
int colTotal (int arr[NR][NC], int numOfCol);
int getHighestInRow (int arr[NR][NC], int numOfRow);
int getLowestInRow (int arr[NR][NC], int numOfRow);

int main()
{
ifstream file("arraysfile.txt");

 int arr[NR][NC];
 int total = 0;
 float avg = 0.0;
 int rowTotal = 0;
 int colTotal = 0;
 int highestInRow = 0;
 int lowestInRow = 0;
 int numOfRow = 0;
 int numOfCol = 0;
   for (int r = 0; r < 10; r++)
   {
     for (int c = 0; c < 5; c++)
     {
     file >> arr[10][5];
     }
   }
   total = getTotal(arr);
   avg = getAverage(arr);
   cout <<"What row would you like to process?"<<std::endl;
   cin >> numOfRow;
   cout <<"What column would you like to process?"<<std::endl;
   cin >> numOfCol;
   rowTotal = (arr, numOfRow);
   colTotal = (arr, numOfCol);
   highestInRow = getHighestInRow(arr, numOfRow);
   lowestInRow = getLowestInRow(arr, numOfRow);
   cout << "Total sum of all number is: "<<total<<std::endl;
   cout << "Average of all numbers is: "<< avg <<std::endl;
  cout << "Sum of row # "<<numOfRow<< " is: "<<rowTotal<<std::endl;
  cout << "Sum of column # "<<numOfCol<< " is: "<<colTotal<<std::endl;
  cout << "The highest number in row # "<<numOfRow<< " is: "<<highestInRow<<std::endl;
  cout << "The lowest number in row # "<<numOfRow<< " is: "<<lowestInRow<<std::endl;
 
}
int getTotal(int arr[NR][NC])
{
  int total = 0;
  for (int i = 0; i < NR; i++)
  {
    for (int j = 0; i <NC; j++)
    {
      total+=arr[i][j];
    }
  }
  return total;
}
float getAverage (int arr[NR][NC])
{
  float avg = 0.0;
  int total = 0;
  for (int i = 0; i < NR; i++)
  {
    for (int j = 0; i <NC; j++)
    {
      total+=arr[i][j];
    }
  }
  avg = (total/(NR/NC));
  return avg;
}
int rowTotal (int arr[NR][NC], int numOfRow)
{
  int rowTotal = 0;
  for (int i = 0; i < NC; i++)
  {
    rowTotal += arr[numOfRow-1][i];
  }
  return rowTotal;
}
int colTotal (int arr[NR][NC], int numOfCol)
{
  int colTotal = 0;
  for (int i = 0; i < NR; i++)
  {
    colTotal += arr[i][numOfCol-1];
  }
  return colTotal;
}
int getHighestInRow (int arr[NR][NC], int numOfRow)
{
  int highest = arr[numOfRow][0];
  for (int i = 0; i < NC; i++)
  {
    if (arr[numOfRow][i] > highest)
    {
      highest = arr[numOfRow][i];
    }
  }
  return highest;
}
int getLowestInRow (int arr[NR][NC], int numOfRow)
{
  int lowest = arr[numOfRow][0];
  for (int i = 0; i < NC; i++)
  {
    if (arr[numOfRow][i] < lowest)
    {
      lowest = arr[numOfRow][i];
    }
  }
  return lowest;
}

【问题讨论】:

  • file &gt;&gt; arr[10][5]; -> file &gt;&gt; arr[r][c]; 这只能解释任何事情,因为您试图写入数组边界之外的数组元素。您的代码具有未定义的行为
  • 您是否尝试过在调试器中逐行运行代码,同时监控所有变量的值,以确定您的程序在哪个点停止按预期运行?如果您没有尝试过,那么您可能想阅读以下内容:What is a debugger and how can it help me diagnose problems?
  • 对于初学者,构建时启用警告并将其视为必须修复的错误。 Your code have some warnings 关于现在可能按您预期工作的事情。
  • 您正在使用 Visual Studio。你在使用调试器吗?

标签: c++ arrays multidimensional-array


【解决方案1】:

如果我开始放入 cmets,注释列表会很长,所以让我们开始你的代码有什么问题:

不检查您的文件是否打开

ifstream file("arraysfile.txt");

if (!file())
    cerr << "error opening file"

正如其他人指出的那样

 file >> arr[r][c];

我觉得这也是个问题

avg = (total/(NR/NC));

应该是total / &lt;numberofcells&gt;(NR*NC)

另一点是使用constexpr 而不是constconst 是运行时常量,constexpr 是编译时常量值。

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多