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

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

本文关键字:响应 程序 中的 scanf 错误 C++      更新时间:2023-10-16

好吧,这很奇怪。当我从代码中删除CCD_ 1和CCD_,程序没有出错。此外,如果我删除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没有在那里初始化。它有一个"随机"值。(不确定是技术术语)。

更新

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

在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运行良好。谢谢你的努力。