C++ 中的 scanf 错误 - 程序没有响应

scanf error in C++ - program doesn't respond

好吧,这很奇怪。当我从代码中删除 int count = 1count++; 时, 该程序没有错误。另外,如果我删除 scanf 并且不删除 count++; 程序没有给出 count++; 的错误。他们与 为什么会这样?

#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <math.h>
int IS_prime(int num) {
    int isprime = 0;
    for (int i = 2; i <= sqrt(num); i += 2) {
        if (i % 2 == 0)
            i++;

        if ((int(num) % i) == 0) {
            return isprime = 1;
            break;
        }
    }

    return isprime;
}
int main(int argc, char **argv) {
    int a = 0;

    char *buffer;

    printf("Enter your sentence:\n");
    scanf("%[^\n]", buffer);

    char array[1000] = " ";
    char temp[2] = " ";

    int count = 1;

    for (int i = 0; i < 100; i++) {
        array[i] = buffer[i];
        a = array[i];
        int PrimeFind = IS_prime(a);

        if (a % 2 == 0) {

            printf("%c", a);
            // Do nothing
        } else if (PrimeFind == 0 && a % 1 == 0) {

            printf("%c", a);

            count++;
        } else {
            a++;
            temp[0] = a;
            printf("%c", a);
        }
    }
}
char *buffer;

printf("Enter your sentence:\n");
scanf("%[^\n]", buffer);

buffer 没有在那里初始化。它有一个 "random" 值。 (不确定 是技术术语)。

更新

只是为了好玩,这里有一个 C++ 版本:

Live On Coliru

#include <iostream>
#include <cmath>
#include <algorithm>

bool is_prime(int num) {
    if (num % 2 == 0)
        return false;

    for (int i = 3; i <= sqrt(num); i += 2)
        if (num % i == 0)
            return false;

    return true;
}

int main() {

    //// test your functions!
    // for (int i = 1; i < 100; ++i) { if (is_prime(i)) std::cout << i << " "; } return 0;

    std::cout << "Enter your sentence: ";
    std::string line;
    if (std::getline(std::cin, line)) {

        std::string encoded;

        size_t count = 0;

        std::transform(
            line.begin(), line.end(), 
            back_inserter(encoded),
            [&count] (uint8_t ch) -> char {
                if (ch % 2 == 0)
                    return ch; // Do nothing

                if (is_prime(ch) && ch % 2 == 1) {
                    count++;
                    return ch;
                } 

                return ch + 1;
            });

        std::cout << "Result: " << encoded << "\n";
        std::cout << "Count:  " << count   << "\n";
    }

}

当输入句子 The lazy cow jumped over the seedy moon! 时,输出是:

Enter your sentence: The lazy cow jumped over the seedy moon!
Result: The lazz dpx jvmped pver the teedz mppn"
Count:  9

好的,这解决了问题。

我改变了这个:

char *buffer;

printf("Enter your sentence:\n");
scanf("%[^\n]", buffer);

为此:

char buffer[100] = " ";

printf("Enter your sentence:\n"); 
fgets(buffer, 100, stdin);

"scanf" 出了点问题,但我想不通。 fgets 运行良好。谢谢你的努力。