我想要一个程序从用户那里读取两个单词并打印出第一个单词出现次数。
当我使用for
循环编写时,它完全按照我的意愿工作,但是当我使用while
循环编写并尝试使用特定输入时,它不会给出正确的结果。我无法弄清楚为什么。代码片段如下。
for
循环:
#include <stdio.h>
int main()
{
char text[200], search[20];
int i, j, count = 0;
scanf("%s %s", text, search);
for (i = 0; text[i] != '\0'; i++) {
for (j = 0; search[j] != '\0' && search[j] == text[i + j]; j++) {
}
if (search[j] == '\0') {
count++;
}
}
printf("%d", count);
}
while
循环:
#include <stdio.h>
int main()
{
char word[50], search[50];
int i, j, count = 0;
scanf("%s %s", word, search);
i = 0;
while (word[i] != '\0') {
j = 0;
while (search[j] != '\0' && search[j] == word[i + j]) {
j++;
}
if (search[j] == '\0') {
count++;
}
i++;
}
printf("%d", count);
}
和输入与for
循环一起使用,但没有使用while
循环给出正确的结果:
athousandyearsofthousandtimesandinthousandplacesOand... and
它应该打印4
,但会打印3026483
。
答案 0 :(得分:4)
for
逻辑和while
逻辑都是正确的。问题在于输入缓冲区的大小。
在第一个程序中text
是200个字符,而在第二个word
中是50个字符。您的输入字符串长度为55个字符,因此它会超出您的输入缓冲区,导致undefined behavior。
使第二个程序中的输入缓冲区更大,它应该可以正常工作。