一次 scanf 或 getchar 10000 次然后程序在 c 中停止
scanf or getchar 10000 times at a time then program stopped in c
#include "stdio.h"
int main() {
int ch,i;
for (i = 0; i < 10000; ++i) {
scanf(" %c", &ch);
putchar(ch);
}
return 0;
}
如果你输入的字符少于 1000 个,它可以工作,但如果你一次输入 10000 个字符,程序就会停止。我可能认为这是因为标准输入缓冲区。
我该如何解决这个问题?
这是更具体的来源。
#include "stdio.h"
#include "stdlib.h"
int main() {
int i,n;
char *p, ch;
scanf("%d", &n);
p = (char*) malloc(sizeof(char) *n);
if (p == NULL) {
return -1;
}
for (i = 0; i < n; ++i) {
scanf(" %c", &ch);
putchar(ch);
}
return 0;
}
住所来源为样本。
- 放 n
(要阅读的字数)然后放长长的字符串。程序停止或等待完成某事。
输入示例
1.
2000
lsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdkalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalssdafsdfsdfdd
这个没用。
但下面的正在运行。
2.
1000
jsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdkalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalssdafsdfsdfddkdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalssdafsdfsdfdd1
您的 for
循环可能如下所示:
for (i = 0; i < n; ++i) {
scanf(" %c", &p[i]);
putchar(p[i]);
}
您还可以尝试刷新代码中的 stdin
输入缓冲区,因为正确添加了以下行:
fflush(stdin);
编辑:由于在某些系统上可能存在未定义的行为,因此可以实现一种替代的和更常见的方法,如下所示:
int ch;
while((ch = getchar()) != EOF && ch != '\n') {
// ...
}
或者您可以通过调用下面的 setvbuf 函数来正确更改流缓冲区大小:
int setvbuf (FILE* stream, char* buffer, int mode, size_t size);
#include "stdio.h"
int main() {
int ch,i;
for (i = 0; i < 10000; ++i) {
scanf(" %c", &ch);
putchar(ch);
}
return 0;
}
如果你输入的字符少于 1000 个,它可以工作,但如果你一次输入 10000 个字符,程序就会停止。我可能认为这是因为标准输入缓冲区。 我该如何解决这个问题?
这是更具体的来源。
#include "stdio.h"
#include "stdlib.h"
int main() {
int i,n;
char *p, ch;
scanf("%d", &n);
p = (char*) malloc(sizeof(char) *n);
if (p == NULL) {
return -1;
}
for (i = 0; i < n; ++i) {
scanf(" %c", &ch);
putchar(ch);
}
return 0;
}
住所来源为样本。
- 放 n
(要阅读的字数)然后放长长的字符串。程序停止或等待完成某事。
输入示例 1.
2000 lsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdkalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalssdafsdfsdfdd
这个没用。
但下面的正在运行。 2.
1000 jsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdkalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalssdafsdfsdfddkdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalsdklsakdjldjsalkfjalssdafsdfsdfdd1
您的 for
循环可能如下所示:
for (i = 0; i < n; ++i) {
scanf(" %c", &p[i]);
putchar(p[i]);
}
您还可以尝试刷新代码中的 stdin
输入缓冲区,因为正确添加了以下行:
fflush(stdin);
编辑:由于在某些系统上可能存在未定义的行为,因此可以实现一种替代的和更常见的方法,如下所示:
int ch;
while((ch = getchar()) != EOF && ch != '\n') {
// ...
}
或者您可以通过调用下面的 setvbuf 函数来正确更改流缓冲区大小:
int setvbuf (FILE* stream, char* buffer, int mode, size_t size);