输入C错误如何处理?

des4xlb0  于 2022-12-03  发布在  其他
关注(0)|答案(6)|浏览(144)

初学者的问题:
想象一下这个场景:我要求用户输入一个整数(使用scanf得到),但用户输入了一个字符;因为这样程序就结束了...但是我想克服它,让程序告诉他他提供了无效的输入,并给予用户另一次输入的机会。我该怎么做呢?

8xiog9wr

8xiog9wr1#

使用fgets(),然后使用sscanf()strtol()

int number;
char ch;
char *Prompt2 = "":
do {
  printf("%sEnter number :", Prompt2);
  Prompt2 = "Invalid input\n";  // Change Prompt2 
  buffer char[50];
  if (fgets(buffer, sizeof buffer, stdin) == NULL) {
    Handle_EOF();
  }  
} while (sscanf(buffer, "%d %c", &number, &ch) != 1);

使用strtol()而不是sscanf()添加+/-溢出保护,因为设置errno

char *endptr; 
  errno = 0;
  long number = strtol(buffer, &endptr, 10);
  if (errno || buffer == endptr || *endptr != '\n') Handle_Error(();

请参阅Read_long()作为如何使用此函数的示例。

vqlkdk9b

vqlkdk9b2#

scanf的传回值是成功扫描的参数数目。

ivqmmu1c

ivqmmu1c3#

怎么样:

int n;
  int c;
  printf("Please enter an integer: ");
  while (scanf("%d", &n) != 1) {
    while (!isspace(c = getchar()));
    ungetc(c, stdin);
    printf("You must enter a valid number. Try again.\n");
    continue;
  }
rjee0c15

rjee0c154#

初学者可以使用stdio.h,这对于家庭作业来说是相当不错的,只要你不期望任何花哨的东西,比如密码字段输入、输入编辑功能、键入时的格式化、功能键和控制键处理等。你对错误输入所能做的仅限于基本操作。
如果你需要用C语言编写一个专业的应用程序,这是我们在70年代和80年代经常做的事情,在C语言中,你必须避免stdio. h,因此输入时必须使用scanf。你必须检查你的操作环境和社区提供了什么。Curses,或者ncurses可能会帮助你解决这个问题。在MS-DOS中,我们习惯于捕捉中断,以便对键盘有绝对的控制权。在Unix中,我们使用Bill Joy's termcap或一个terminfo库,这些库允许你控制你的终端和键盘。
请记住,创建一个清晰的基于文本的用户界面并不是一件小事,完全控制用户的输入也不是一件容易的事情。幸运的是,这也不再是一个问题了,因为Java和Swing已经出现了...

7qhs6swi

7qhs6swi5#

基本技术是检测问题(从*scanf()意外返回值),然后读取行的其余部分(将字符快速插入换行符或EOF),然后继续。
或者,通常更好的方法(尤其是因为错误报告可以报告整个行)是使用fgets()getline()读取整个行,然后使用sscanf()或其他技术解析该行,并从那里开始。

px9o7tmv

px9o7tmv6#

您可以将用户的输入作为字符串读取,然后使用strtol()将其转换为整数。

int main(void)
{
  char* end;
  char number_temp[256];

  int number;  

  while(1)
  {
     puts("Give a number");
     scanf("%s",number_temp);

     number = strtol(number_temp, &end, 10);

     if (end)              //If there is an error the value of *end will be non zero
        printf("try again");
     else
        break;
  }
  return 0;
}

相关问题