每次扫描f或getchar 10000次,然后程序在c中停止


#include "stdio.h"
int main() {
int ch,i;
for (i = 0; i < 10000; ++i) {
scanf(" %c", &ch);
putchar(ch);
}
return 0;
}

若你们放入的字符数少于1000,那个么它是有效的,但若你们一次放入10000个字符,那个么程序就会停止。我可能认为是因为stdin缓冲区。我该如何解决这个问题?

以下是更具体的来源。

#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.

2000lsakdjldjsalkfjalsdklsakdj alkfjalsdklsakdjldjsalkfjialsdklsakdjldjsalkklsakdjldjsalkfjalsdklsakdjldjsalk alkfjalsdklsakdjldjsalkfjialsdklsakbjldjsalkdklsakdjldjsalkfjalsdklsakdjldjsalk jsalkfjalssdklsakdjldjsalkfjalsdklsakdjldjsalk jsalkfjalsdklsakdjldjsalkjjalsdkalsakdjldlsdklsakd dklsakdjldjsalkfjalsdklsakdjldjsalksdfdd

这个不起作用。

但下面的是有效的。2.

1000jsalkfjalsdklsakd lsakdjldjsalkfjalsdklsakdjlddjsalkfjaldkalkfjalsdklsakdjldjsalkfjaalsdklsakdjldjsalk jldjsalkfjalsdklsakdjldjsalksalkfjalsdklsakdjldjsalkfjaalsdklsakdjldjsalk

您的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);

相关内容

最新更新