簡體   English   中英

c-需要替代方法

[英]c - need an alternative for fflush

我只允許使用標准的c庫,所以fpurge()不是我的選擇。

int dim = 0;
int c = 0;

printf("Please enter a number");

while ( (( c = scanf("%d",&dim)) != 1 ) || (dim < 1) || (dim > UCHAR_MAX) )   
{
    if (c == EOF)
    {
        return 0;
    }
    fflush(stdin);
    printf("[ERR] Enter a number\n");
    printf("Please enter a number");
}

該程序應讀取大於1的數字,並且如果存在字母之類的“錯誤”輸入,則該程序應該會發出錯誤消息。 它在我的Windows pc上與fflush一起使用,使程序應在Linux系統上運行。

我該如何替換仍能正常工作的fflush? 因為當我不使用它時,我會陷入無限循環。

輸入的數字確定在程序的其余部分中使用某行代碼的頻率,這就是為什么我需要數組的原因。

您可能想要這樣的東西:

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

int main()
{
  int dim = 0;

  for (;;)
  {
    printf("Please enter a number: ");
    char buffer[30];
    fgets(buffer, sizeof(buffer), stdin);

    char *endpointer;
    dim = strtol(buffer, &endpointer, 10);

    if (*endpointer != '\n' || (dim < 1) || (dim > UCHAR_MAX))
    {
      printf("[ERR] Enter a number\n");
      continue;
    }
    break;
  }

  printf("The number you entered is: %d\n", dim);
}

調用strtolendptr指向輸入的第一個非數字char。 如果僅輸入數字, endptr將指向終止行的\\n ,否則,例如,如果輸入12x ,則endptr將指向'x'

您可以通過編寫GetNumber函數來改善這一點,這樣您就可以編寫

dim = GetNumber();

要么

dim = GetNumber("Please enter a number: ", "[ERR] Enter a number\n", 1, UCHAR_MAX);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM