麻烦循环'for'和'while'

时间:2016-07-31 21:51:47

标签: c loops

我想要一个程序从用户那里读取两个单词并打印出第一个单词出现次数。

当我使用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

1 个答案:

答案 0 :(得分:4)

for逻辑和while逻辑都是正确的。问题在于输入缓冲区的大小。

在第一个程序中text是200个字符,而在第二个word中是50个字符。您的输入字符串长度为55个字符,因此它会超出您的输入缓冲区,导致undefined behavior

使第二个程序中的输入缓冲区更大,它应该可以正常工作。