代码之家  ›  专栏  ›  技术社区  ›  Harrison Tran LamBigini

scanf无法从用户处获取2个输入:整数和字符串[重复]

  •  1
  • Harrison Tran LamBigini  · 技术社区  · 7 年前

    当我输入年龄输入“20”时,按Enter键,它会转到新行,再次按Enter键,它会再次转到新行。 无论我按了多少次enter键,直到我键入“harri”或任何字符/单词,它才从代码中出来,然后显示下一行代码。为什么会这样?如何修复它,以便在键入“20”Enter时,它将执行下一行代码( printf(" Please enter your name\n") )?

    输出: output

    void print_Struct_Element(List *list) {
       printf("String name: %s\n",list->head->name);
       printf("Age data: %d\n",list->head->age);
    
       printf("head address %p\n",list->head );
       printf("tail address %p\n",list->tail );
       printf("head value %p\n",&list->head );
       printf("tail value %p\n",&list->tail );
    }
    
    
    
    int main() {
    
    char name[10];
    int age, count;
    printf("Please enter your age ");
    scanf("%d\n",&age);
    printf(" Please enter your name\n");
    scanf("%s\n",name);
    
    List moneyManagerList;
    insertAtHead(&moneyManagerList,name,age );
    print_Struct_Element(&moneyManagerList);
    return 0;
    }
    

    这是我的另一次尝试;全部失败:

    int main() {
    
      char name[10];
      int age, count;
      // printf("Please enter your name and age  \n ");
      //  sscanf("harrison 30", "%s %d",name, &age );
      printf("Please enter your age ");
        //fgets(age, 5, stdin);
    
       scanf("%d\n",&age);
    
      printf(" Please enter your name\n");
       fgets(name,10, stdin);
        //scanf("%s\n",name);
    
      List moneyManagerList;
      insertAtHead(&moneyManagerList,name,age );
      //moneyManagerList.head->name = strcpy(moneyManagerList.head->name, name );
      //printf("head string name %s\n",moneyManagerList.head->name );
      print_Struct_Element(&moneyManagerList);
    
      return 0;
    }
    

    Github链接: https://github.com/lambigini87/linked-link-moneyManager-project/blob/master/main.c

    2 回复  |  直到 7 年前
        1
  •  2
  •   Nakini    7 年前

    我的回答可能是评论,但我没有足够的分数来评论。所以,这里是--去掉scanf函数中的“\n”。

        2
  •  1
  •   I. Ahmed    7 年前

    请删除 \n 来自scanf。

    scanf("%d",&age);
    

    如果您有任何整数/浮点读取语句,那么它将尝试读取整数/浮点,直到给出一个值。然而 scanf 如果在控制台中为整数提供字符串,则立即终止。