如何使用Enter键退出C程序

如何使用Enter键退出C程序,c,exit,terminate,enter,C,Exit,Terminate,Enter,当程序要求输入一个数字时,我试图通过按Enter键来找出退出程序的方法 我在main()中尝试了这个if语句,但它似乎不起作用 int main() { while(1){ int val; printf("\nnumber to convert:\n "); scanf("%i", &val); ibits(val); if (val = '\n') { break; } } return 0; }

当程序要求输入一个数字时,我试图通过按Enter键来找出退出程序的方法

我在
main()
中尝试了这个
if
语句,但它似乎不起作用

int main()
{
  while(1){
    int val;
    printf("\nnumber to convert:\n ");
    scanf("%i", &val);

    ibits(val);
    if (val = '\n')
    {
      break;
    }
  }

  return 0;
}

您真的不应该直接使用
scanf
。。。尤其是当您希望使用多种可能的格式时

考虑改用
fread
,然后将输入转换为正确的格式

i、 e:

这还将允许您验证输入并测试溢出攻击:

int main() {
  while (1) {
    char buf[1024];
    printf("\nnumber to convert:\n ");
    unsigned long len = fread(buf, 1, 1023, stdin);
    buf[len] = 0;
    if (len > 11)
      goto under_attack;
    if (len == 0 || (len == 1 && buf[0] == '\n') ||
        (len == 2 && buf[0] == '\r' && buf[1] == '\n'))
      break;
    if (buf[0] != '-' && (buf[0] < '0' || buf[0] > '9'))
      goto under_attack;
    int val = atoi(buf);
    ibits(val);
  }
  return 0;

under_attack:
  fprintf(stderr, "Under attack?!\n");
  return -1;
}
intmain(){
而(1){
char-buf[1024];
printf(“\n要转换的编号:\n”);
无符号长len=fread(buf,11023,stdin);
buf[len]=0;
如果(len>11)
后藤受到攻击;
如果(len==0 | |(len==1&&buf[0]=='\n')||
(len==2&&buf[0]='\r'&&buf[1]='\n'))
打破
如果(buf[0]!='-'&&(buf[0]<'0'| | buf[0]>'9'))
后藤受到攻击;
int val=atoi(buf);
ibits(val);
}
返回0;
受到攻击:
fprintf(stderr,“受到攻击”?\n);
返回-1;
}

至少,您应该将
if
语句中的
=
更改为
=
。始终检查
scanf()中的返回值。在这种情况下,它可能返回零,这意味着没有实际读取和转换任何字段。而且AFAIK,
scanf(%i,&val)
仅当输入是数字字符串时才会正确扫描输入(即,它不会将字符
\n
扫描为
val
)。请注意
scanf()
中的“f”最初表示“格式化”,由于
scanf()
是为扫描格式化数据而开发的,因此它几乎无法处理任何不符合预期格式的内容,也无法允许您从意外输入中恢复。如果
scanf()在程序结束时。@JL2210-实际上,这是转到
的最佳用例,原因有二:1。(最重要的是)它使代码更易于阅读-在读取函数主体时无需读取错误分支;2.不太复杂的编译器会将不太可能出现的分支放在机器代码的末尾,从而提高性能。。。我知道大学告诉学生不要使用
goto
——但在现实世界的实现中,
goto
是错误分支的最佳场所。
int main() {
  while (1) {
    char buf[1024];
    printf("\nnumber to convert:\n ");
    unsigned long len = fread(buf, 1, 1023, stdin);
    buf[len] = 0;
    if (len > 11)
      goto under_attack;
    if (len == 0 || (len == 1 && buf[0] == '\n') ||
        (len == 2 && buf[0] == '\r' && buf[1] == '\n'))
      break;
    if (buf[0] != '-' && (buf[0] < '0' || buf[0] > '9'))
      goto under_attack;
    int val = atoi(buf);
    ibits(val);
  }
  return 0;

under_attack:
  fprintf(stderr, "Under attack?!\n");
  return -1;
}