gpt4 book ai didi

c - 帮助 scanf 在 Big Endian 系统上表现不同

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:44 24 4
gpt4 key购买 nike

我的代码应该从用户那里读取一行,如果该行以“output”开头,那么它会打印出“Line is output”并等待用户输入另一行。

如果该行以“input”开头,它会打印出“Line is input”并终止。

我的代码在 Intel 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);
....

最佳答案

这不是字节序问题。这是关于如何在不同平台上执行标准输入的缓冲。基本上,您不能在标准输入(或任何其他输入流)上使用 fflush() - C 标准表示这样做是未定义的。

关于c - 帮助 scanf 在 Big Endian 系统上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5937295/

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