gpt4 book ai didi

c - printf 不创建输出或创建错误输出

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:54 25 4
gpt4 key购买 nike

我写了一个程序,出于调试目的,我想在控制台中写入一些文本。现在我发现了一个非常奇怪的错误并且找不到解决方案。这是我的代码:

int main(void)
{
setvbuf (stdout, NULL, _IONBF, 0);
char input[50];
char check = 'a';
for(int i=0; check != EOF; ++i){
check = scanf("%s", input);
printf("%s\n",input);
}

fflush(stdout);

char* myAnswer = createList();
printf("%s\n", myAnswer);

return 0;
}
//-----------------------------------------------------------------------------

char* createList(){
char* msg = malloc(6*sizeof(char));
msg[0]='A';
msg[1]='B';
msg[2]='C';
msg[3]='D';
msg[4]='E';
msg[5]='\0';
return msg;
}

for 循环工作正常,但从未写入“ABCDE”。相反,有时我在输入中保存的最后一个单词会在控制台中第二次写入,而缺少最后一个字母。或者根本就什么都没写。我试图通过刷新缓冲区或将其设置为零大小来解决它。但没有任何帮助。我使用 Qt Creator,错误可能出在我的 IDE 中吗?

最佳答案

更正了部分代码(例如在 EOF 处中断循环、将数据类型更改为 int 等)。请查看以下代码是否有效。您需要在最后一次输入后按 Ctrl-D 以确保循环中断。

#include <stdio.h>
#include <stdlib.h>

char* createList();

int main(void)
{
setvbuf (stdout, NULL, _IONBF, 0);
char input[50];
for(;;){
if (fgets(input, 50, stdin) == NULL)
break;
printf("%s\n",input);
}

fflush(stdout);

char* myAnswer = createList();
printf("%s\n", myAnswer);

return 0;
}
//-----------------------------------------------------------------------------

char* createList(){
char* msg = (char *) malloc(6*sizeof(char));
msg[0]='A';
msg[1]='B';
msg[2]='C';
msg[3]='D';
msg[4]='E';
msg[5]='\0';
return msg;
}

关于c - printf 不创建输出或创建错误输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33460572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com