gpt4 book ai didi

c - 为什么我在 C 中得到这么大的数字?

转载 作者:可可西里 更新时间:2023-11-01 09:44:20 24 4
gpt4 key购买 nike

我正在尝试使用 Kernighan 的书自学 C,我应该制作一个图表来指示每个单词中有多少个字母。我还没有进入“绘图”部分,因为我在输出中得到了非常奇怪和巨大的数字。现在我只是想打印数组“arreglo”的第一个和第二个元素的值。

代码如下:

#include <stdio.h>
#define ARRAY_SIZE 100

/*#define AUX 0
#define AUX2 0*/

main()
{
int s,j,noletra,i,arreglo[ARRAY_SIZE],otros, nopalabra, c;
int a;
nopalabra=1;

while((c=getchar())!=EOF)
{
if(c==' '||c=='\t'||c=='\n')
++nopalabra;
else
++arreglo[nopalabra];
}
printf("%d",arreglo[1],arreglo[2]);

}

我想知道数组中第二个元素的值的原因是第一个元素具有正确的值。该代码应该将 1 添加到数组索引,这是每次键入空格、制表符或\n 时的单词数,并且每当键入与前面提到的字符(字母)不同的内容时,将数组元素添加 1。现在它应该正确打印两个单词的字母数,第一个元素正确打印但第二个元素是一个巨大的数字,输出是:

    alan amaury
^Z
4 8257542
--------------------------------
Process exited after 7.773 seconds with return value 9
Press any key to continue . . .

输出应该是 4 7。我在 Windows 中使用编译器,所以 EOF 应该是 Ctrl+Z

我将不胜感激 :)

最佳答案

至少这些问题。

  1. int arreglo[ARRAY_SIZE]; 在其元素递增之前未初始化。这是“为什么我得到这么大的数字”的最可能原因 @ikegami

     // int arreglo[ARRAY_SIZE];
    // replace with
    int arreglo[ARRAY_SIZE] = { 0 };
  2. 代码可以越界访问,因为 nopalabra 不限于 0 到 99。

    #define ARRAY_SIZE 100
    int arreglo[ARRAY_SIZE];
    ++arreglo[nopalabra]; // No access protection
  3. printf("%d",arreglo[1],arreglo[2]); 只打印 arreglo[1]

    <
  4. “制作一个图表,表示每个单词中有多少个字母”的逻辑流程不正确。

  5. main() 返回类型未编码。


一些伪代码作为替代

int main(void) {
set all arreglo[] to 0
int nopalabra = 0;
part_of_word = false; // Keep track of word state
loop forever {
get a character into c
if c is a separator or EOF
if (part_of_word) {
arreglo[nopalabra]++;
part_of_word = false;
nopalabra = 0;
if (c == EOF) break loop
} else {
nopalabra++;
part_of_word = true;
}
}

print out results
}

关于c - 为什么我在 C 中得到这么大的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48306269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com