如何在c中输入和扫描多个字符

时间:2017-12-14 14:57:05

标签: c login

我想要输入多个printfs,但我没有机会进入。 我只能输入1,但之后它只是结束了programme.I尝试了do虽然但它没有工作

int main()
{
  int number;
  char username[30]="";
  char fullName[30]="";
  char password[30]="";
  printf("Do you want to log in(1) or register (2)? \n");  
  scanf("%d",&number);
  if (number==2)
  {
    printf("username : ");
    scanf("%s",&username);
    printf("Full name : ");
    scanf("%s",&fullName);
    printf("Password : ");
    scanf("%s",&password);
    printf("Repeat password : ");
    scanf("%s",&password);
  }
  return 0;
}

3 个答案:

答案 0 :(得分:1)

使用fgets()将完整行读入适当大的缓冲区,然后解析。

请注意%s将停在第一个空白字符处,因此全名“Mr X”将在输入缓冲区中留下“X”,抓取密码等等。这真的不是一种获取输入的强大方式。

答案 1 :(得分:1)

  

我只能输入1,但之后它只会结束程序。

当然,代码有if (number==2) @Scadge

如果您输入"2",请考虑以下事项:

scanf("%s",&fullname);不会将空格或其他空格分隔到fullname。输入“John Doe”等全名会将"John"保存到fullname,将"Doe"保存到password

避免使用scanf()

不是使用scanf()来读取用户输入,而是使用fgets()读取用户输入。对于可以处理各种输入问题的辅助函数来说,这是一个很好的机会。

int read_int(const char *prompt) {
  if (prompt) fputs(prompt, stdout);
  fflush(stdout);  // insure output is written before asking for input

  char buffer[40];
  if (fgets(buffer, sizeof buffer, stdin) == NULL) {
    return NULL;
  }

  int i;
  if (sscanf(buffer, "%d", &i) == 1) {
    return i;
  }

  // TBD - what should code do if invalid data entered.  Try again?
}

char *read_line(char *dest, sizeof size, const char *prompt) {
  if (prompt) fputs(prompt, stdout);
  fflush(stdout);  // insure output is written before asking for input

  char buffer[size * 2 + 1];  // form buffer at _least 1 larger for \n
  if (fgets(buffer, sizeof buffer, stdin) == NULL) {
    return NULL;
  }

  size_t len = strlen(buffer);
  if (len > 0 && buffer[len-1] == '\n') buffer[--len] = '\0';

  if (len >= size) {
    // input too big - how do you want to handle this?
    TBD_Code();
  } 
  return strcpy(dest, buffer);
}

现在使用这两个辅助函数来清理用户输入

// printf("Do you want to log in(1) or register (2)? \n");  
// scanf("%d",&number);
number = read_int("Do you want to log in(1) or register (2)? \n");

...

// printf("username : ");
// scanf("%s",&username);
read_line(username, sizeof username, "username : ");
// printf("Full name : ");
// scanf("%s",&fullName);
read_line(fullName, sizeof fullName, "fullName : ");

可以添加其他代码来检查文件结尾,超长行,int范围测试等。

答案 2 :(得分:0)

使用c库函数fgets()。

[b]