C 跳过输入用户名的输出

C 跳过输入用户名的输出,c,C,我需要做一个日志/计划,在那里我可以有一个用户名和密码登录,并设置一个登录和帐户,如果你还没有。我需要稍后能够使用它登录并访问我的日志。在那里我可以输入条目并保存它。这样,当我退出程序并再次启动程序时,一旦我登录,我就可以再次访问planner 所以我的问题是,为了设置我的帐户,我需要允许用户输入用户名和密码,但是当我启动程序时,它跳过了我可以输入用户名的部分,直接进入密码。守则: #include <stdio.h> #include <stdlib.h> #defin

我需要做一个日志/计划,在那里我可以有一个用户名和密码登录,并设置一个登录和帐户,如果你还没有。我需要稍后能够使用它登录并访问我的日志。在那里我可以输入条目并保存它。这样,当我退出程序并再次启动程序时,一旦我登录,我就可以再次访问planner

所以我的问题是,为了设置我的帐户,我需要允许用户输入用户名和密码,但是当我启动程序时,它跳过了我可以输入用户名的部分,直接进入密码。守则:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 1000

void signUp (char username [SIZE], char password [SIZE], char name [SIZE], int age) {
    printf("Sign Up Procedure: \n");
    printf("\nPlease enter your username: ");
    gets(username);
    printf("\nPlease enter a password: ");
    gets(password);
    printf("\nEnter your full name: ");
    gets(name);
    printf("\nEnter your age: ");
    scanf("%d", &age);

    printf("Username: %s, Password: %s, Full Name: %s, Age: %d", username, password, name, age);
}

void logIn(char username [SIZE], char password [SIZE]) {

}

int main() {
    printf("1. Log In\n");  // Enter 1 for logging in
    printf("2. Sign Up\n"); // Enter 2 for signing up
    int choice;
    scanf("%d", &choice);

    char username [SIZE];
    char password [SIZE];
    char name [SIZE];
    int age;

    int keepGoing = 0;

    while (keepGoing == 0){
        switch (choice) {
        case (1):
            logIn (username, password);
            keepGoing = 1;
            break;
        case (2):
            signUp (username, password, name, age);
            keepGoing = 1;
            break;
        default:
            printf("Please enter a choice from the given options");
            keepGoing = 0;
            break;
        }
    }

    FILE * pfile;

    pfile = fopen("Planner.txt", "w");

    fputs("Planner", pfile);

    fclose(pfile);

    return 0;
}
#包括
#包括
#定义大小1000
无效注册(字符用户名[大小]、字符密码[大小]、字符名称[大小]、整数年龄){
printf(“注册程序:\n”);
printf(“\n请输入您的用户名:”);
获取(用户名);
printf(“\n请输入密码:”);
获取(密码);
printf(“\n输入您的全名:”);
获取(名称);
printf(“\n输入您的年龄:”;
scanf(“%d”和年龄);
printf(“用户名:%s,密码:%s,全名:%s,年龄:%d”,用户名,密码,姓名,年龄);
}
无效登录(字符用户名[大小],字符密码[大小]){
}
int main(){
printf(“1.Log-In\n”);//输入1进行登录
printf(“2.注册\n”);//输入2进行注册
智力选择;
scanf(“%d”,选择(&C);
字符用户名[大小];
字符密码[大小];
字符名称[大小];
智力年龄;
int keepGoing=0;
while(keepGoing==0){
开关(选择){
案例(1):
登录(用户名、密码);
keepGoing=1;
打破
案例(2):
注册(用户名、密码、姓名、年龄);
keepGoing=1;
打破
违约:
printf(“请从给定选项中输入一个选项”);
keepGoing=0;
打破
}
}
文件*pfile;
pfile=fopen(“Planner.txt”,“w”);
FPUT(“计划员”,pfile);
fclose(pfile);
返回0;
}
您的第一个
scanf()

正在读取一个整数,因此它将换行符保留在输入缓冲区中

然后,当您尝试获取用户名时:

gets(username);

它拾取该换行符并将其分配给
username
。我建议阅读
C
input,以及为什么
scanf()
使用起来既危险又棘手,特别是在混合整数和字符串输入以及与其他
C
input函数一起使用时。

您要求用户名或密码的部分在哪里?
while(keepGoing==0){do_stuff}
->“继续”是错误的,请继续。。。(不是一个错误,只是非常糟糕的命名)我一开始就要求在注册方法中输入用户名。那么我应该使用什么来代替scanf()?您可以在scanfYeah之后添加getchar()来吞下这一新行,您可以添加另一个输入语句并吃掉多余的新行,但这并不是真正建立良好的编码实践
fgets()
通常优于
scanf()
…这是一个很好的阅读。。。
gets(username);