无法计算 char 类型的数量

Posted

技术标签:

【中文标题】无法计算 char 类型的数量【英文标题】:unable to count numbers of char type 【发布时间】:2016-07-28 15:53:14 【问题描述】:

我正在尝试为我的作业做一个特定的计数器,但我尝试了很多方法,但我仍然无法弄清楚。

我的程序允许用户根据输入找出三角形的类型。

所以我确实有两个主要功能来确定三角形的形状并显示计数器。

    char shapeTriangle(int, int, int); //确定三角形的形状,即等腰('I'),等边('E')

    int summaryDisplay(char); // 显示计数器

在我的shapeTriangle 函数中,我有一个简单的 if else 语句,它根据用户输入返回类型

char shapeTriangle(int x, int y, int z)


char type;

if (x == y && y == z && x == z)

type = 'E';

else if (x == y || y == z || x == z)

type = 'I';
    
return type;

在我的main function,我有一个循环允许用户输入,直到其中一个值为 0。

summaryDisplay,我正在尝试计算确定某个三角形的次数

int finalSum(char type)

int eCount = 0,  iCount = 0;

if (type == 'E')

eCount++;

if (type == 'I')

iCount++;
        
cout << "Equilateral" << eCount;
cout << "Isosceles" << iCount;


我设法获得了一个输出,但是计数器返回给我一些奇怪的值,例如 5409343453 等,我无法真正弄清楚它们。

这就是我尝试在int main 中调用我的函数的方式

int main()



int x, y, z;  

do

cout << "Enter 3 intgers : ";
cin >> x >> y >> z;

//some display output codes

while ( x != 0 && y != 0 && z != 0); 

finalSum(shapeTriangle(x, y, z));


感谢任何帮助。

编辑 1: 我尝试初始化,但是,它为所有不同类型返回 0。

【问题讨论】:

如果您的条件都不为假,则返回未初始化的type eCount, iCount 也没有初始化。 我尝试初始化为 0,但似乎仍然返回 0 个计数器 【参考方案1】:

只需用零初始化您的计数器,这将作为您的计数器起始值。像这样:

int eCount = 0, iCount = 0;

另外,如果您的条件都不满足,您希望type 成为什么?因为如果您没有初始化 type 并且没有满足您的条件(if (x == y &amp;&amp; y == z &amp;&amp; x == z)if (x == y || y == z || x == z)),那么稍后您的两个计数器都将保持为 0。

【讨论】:

我缩短了我的代码。详细地说,我确实有 4 种不同的类型,即 equilateralscaleneisoscelesnotatriangle。因此,一旦不满足任何条件,计数器将添加到notatriangle 类型。不幸的是,即使我的int main 显示并读取不同类型的三角形,所有返回计数器仍然为 0 然后将您的type 初始化为N,如下所示:char type = 'N'; 如果您希望它成为您的默认值.. 我没有任何默认值。一旦输入与 4 种不同类型中的任何一种都不匹配,我就有一个循环取消任何输入。【参考方案2】:

你必须初始化你的变量。

【讨论】:

【参考方案3】:

type 没有默认值。如果所有三个输入值都不同怎么办?在您的 if 语句中没有为 type 分配任何值,并且它没有被初始化。

尝试为未知设置一个默认值,例如'U'...

【讨论】:

如上所述,我确实有一个默认值,我没有输入到问题中以缩短我的代码。我有 4 种不同的类型,它们是 equilateralscaleneisoscelesnotatriangle。所以type肯定会有一些初始化。不幸的是,它仍然为所有计数器返回 0。【参考方案4】:

您似乎在finalSum() 的范围内声明了eCountiCount。这意味着它们的值(如果未初始化)将是堆栈上先前活动的垃圾,这就是您所看到的。 尝试全局声明它们,以便在函数调用中保留它们的值

您应该确保您的计数变量在递增之前已正确声明和初始化,否则您将陷入未定义的行为。

【讨论】:

@Rakete1111 对初学者来说很容易。此外,在编写代码时,eCountiCount 永远不会初始化,这是您最关心的问题,type 也是如此。 不要推荐全局变量。 @FirstStep 是的,绝对有。 全局变量通常对大规模应用和可维护性不友好。使用全局变量而不是返回值会使调试变得几乎不可能,这当然是要避免的。否则,如果不需要全局变量并且不限于它们重要的类/命名空间,全局变量会导致混乱。 @FirstStep 因为它们使您的程序完全不可预测。您的程序仍然有效的唯一原因是它们很小。在这里,一些文献:Action at a distance、“Global variables are bad”、“Why is global state so evil?”。 — 真的,不要低估这有多糟糕:it destroys programs。

以上是关于无法计算 char 类型的数量的主要内容,如果未能解决你的问题,请参考以下文章

编程计算 S=1+2+4+8、、、、、、、、、 (100项) 用汇编或C语言 选啥数据类型呀?

C语言中怎么计算一个类型的取值范围?如 char 用程序算

常量表达式的计算结果为 -1,不能缩小为类型 'char' [-Wc++11-narrowing] 错误

C语言中怎么计算一个类型的取值范围?如 char 用程序算

数据类型unsigned char表示范围(存储值的范围)是多少,为啥(写出计算过程)

C语言 不允许使用不完整的类型