我的代码应该从用户读取一行,如果该行以“ output ”开头,则打印出“ Line is output is ”并等待用户输入另一行。
如果该行以“ input ”开头,则会打印出“ Line is input ”并终止。
我的代码在英特尔PC上工作正常,但是在Debian SPARC上,似乎scanf在第一次之后不等待输入,只是无限地读取空行或其他东西。
我在哪里错了?
#include <stdio.h>
#include <string.h>
int main()
{
char buf[9000];
char key[5];
char *p=buf;
int readMore=1;
while(readMore)
{
//read in one line from stdin into buffer
scanf("%[^\n]",buf);
fflush(stdin);
sscanf(p, "%s",key); //get key from buffer
printf("Key:%s\n",key); //print key
if (strcmp("output",key)==0)
{
printf("Line is output\n");
}
if (strcmp("input",key)==0)
{
readMore=0;
printf("Line is input\n");
fflush(stdin);
getchar();
return 0;
}
key[0]=0;
buf[0]=0;
} //end while
return 0;
}
修正如下:
......
int bytes_read;
int nbytes = 100;
while(readMore)
{
/* These 2 lines are the heart of the program. */
p = (char *) malloc (nbytes + 1);
bytes_read = getline (&p, &nbytes, stdin);
....
答案 0 :(得分:4)
这不是一个endian问题。这是关于如何在不同平台上执行标准输入的缓冲。基本上,你不能在标准输入(或任何其他输入流)上使用fflush() - C标准说这样做是未定义的。