【发布时间】:2016-02-01 07:55:25
【问题描述】:
我编写了一个程序,出于调试目的,我想在控制台中写入一些文本。现在我发现了一个非常奇怪的错误并且找不到解决方案。这是我的代码:
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 中吗?
【问题讨论】:
-
scanf()返回一个int。不是char -
谢谢,我改了。但不影响输出
-
它对我来说工作正常。为你的函数添加一个原型。
-
@Jonas 停止检查
EOF,检查scanf是否返回1。如果不是,那么scanf失败。 -
@Haris 恐怕不行。这不是
scanf返回的内容。它返回成功匹配的参数数量 -cplusplus.com/reference/cstdio/scanf
标签: c stream printf buffer console-application