C++ 中的 scanf 错误 - 程序没有响应
scanf error in C++ - program doesn't respond
好吧,这很奇怪。当我从代码中删除 int count = 1
和 count++;
时,
该程序没有错误。另外,如果我删除 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++ 版本:
#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 运行良好。谢谢你的努力。
好吧,这很奇怪。当我从代码中删除 int count = 1
和 count++;
时,
该程序没有错误。另外,如果我删除 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++ 版本:
#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 运行良好。谢谢你的努力。