我开始学习c。我正在尝试编写一个代码来计算一个句子中 a 和 A 的数量,但该代码每次执行时都会给我随机数,即使它是同一个句子。
#include <stdio.h>
#include <string.h>
int main()
{
char words[10000000000];
int i;
int acount = 0;
int Acount = 0;
char A[0]="A";
char a[0]="a";
printf("Input your sentence to be counted.");
scanf("%s",words);
printf("%s",words);
for (i=0;i<=sizeof(words);i++)
{
if (words[i]==a[0]){
acount++;
}else if (words[i]==A[0]){
Acount++;
}
}
printf ("\nThe number of A's is %i. The number of a's is %i.",Acount,acount);
return 0;
}
最佳答案
Why is my code outputting random numbers even though they are just counts?
因为根据您发布的代码,您正在计算未初始化内存。
这是未初始化的:
char words[10000000000];
(如果 10 GB 适合......)
这仅将内存设置为 words
对于读取的字符串,加上终止符 '\0'
字符:
scanf("%s",words);
无论如何,假设它有效。您没有检查返回值,所以可能它不起作用......
现在这个循环会做什么? (忽略 int
可能不够大,无法索引 10GB 数组的事实...)
for (i=0;i<=sizeof(words);i++)
{
if (words[i]==a[0]){
acount++;
}else if (words[i]==A[0]){
Acount++;
}
}
该循环将检查每个 char
在数组 word
中并将其与“A”或“a”进行比较。其中每最后 100 亿个左右,其中许多(如果不是大多数)都可能包含未知值。
它还会检查 char
过去 word
的结尾。这不好。这不会检查 word
结尾之后的内容:
size_t i;
...
for (i=0;i<sizeof(words);i++)
{
if (words[i]==a[0]){
acount++;
}else if (words[i]==A[0]){
Acount++;
}
}
请注意 <
的更改而不是<=
,以及 size_t
的使用对于 i
而不是int
.
更好的是,您不必尝试计算随机数据:
size_t i;
...
for (i = 0; words[i]; i++) {
if (words[i] == a[0]) {
acount++;
} else if (words[i] == A[0]) {
Acount++;
}
}
由于字符串以 '\0'
结尾char
值,循环现在将在 words[i]
时结束其值为零。
关于c - 为什么我的代码输出随机数,即使它们只是计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46142076/