Помогите с scanf вести себя по-другому в системе Big Endian - PullRequest
1 голос
/ 09 мая 2011

Мой код должен прочитать строку от пользователя, если строка начинается с " output ", то выводит " Line, выводится " и ждет, пока пользователь введите другую строку.

Если строка начинается с " input ", она печатает " Line, является входной " и заканчивается.

Мой код отлично работает на ПК Intel, однако на 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);
....

1 Ответ

4 голосов
/ 09 мая 2011

Это не порядковая проблема. Это о том, как буферизация стандартного ввода выполняется на разных платформах. По сути, вы не можете использовать fflush () для стандартного ввода (или любого другого потока ввода) - стандарт C говорит, что это не определено.

...