Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C编程从用户那里获取信息_C_String - Fatal编程技术网

C编程从用户那里获取信息

C编程从用户那里获取信息,c,string,C,String,这是我第一次使用C 我需要要求用户输入一些信息 #include <stdio.h> #include <stdlib.h> int main(void) { int age; int i; char last_name[20]; char first_name[20]; double wight; char gender[1]; printf("Enter your age: "); scanf("

这是我第一次使用C 我需要要求用户输入一些信息

 #include <stdio.h>
#include <stdlib.h>

int main(void) {
    int age;
    int i;
    char last_name[20];
    char first_name[20];
    double wight;
    char gender[1];


    printf("Enter your age: ");
    scanf("%d", &age);
    printf("Enter your last name: ");
    fgets(last_name, 18, stdin);
        i = strlen(last_name)-1;
        if( last_name[ i ] == '\n')
            last_name[i] = '\0';

    printf("Enter your first name: ");
    fgets(first_name, 18, stdin);
            i = strlen(first_name)-1;
            if( first_name[ i ] == '\n')
                first_name[i] = '\0';

    printf("Enter your wight: ");
    scanf("%lf", &wight);
    printf("Enter your gender m/f: ");
    gets(gender);

    printf("You entered %s successfully\n ", first_name);
    return EXIT_SUCCESS;
}
#包括
#包括
内部主(空){
智力年龄;
int i;
char last_name[20];
char first_name[20];
双怀特;
性别[1];
printf(“输入您的年龄:”);
scanf(“%d”和年龄);
printf(“输入您的姓氏:”);
fgets(姓氏18,标准名称);
i=斯特伦(姓氏)-1;
如果(姓氏[i]='\n')
姓氏[i]='\0';
printf(“输入您的名字:”);
fgets(名字,18,标准名称);
i=斯特伦(名字)-1;
如果(名字[i]='\n')
名字[i]='\0';
printf(“输入您的权限:”);
扫描频率(“%lf”、&wight);
printf(“输入您的性别m/f:”);
获得(性别);
printf(“您成功输入了%s”,第一个\u名称);
返回退出成功;
}
如果我运行这个程序 输入您的年龄:23 输入您的姓氏:输入您的名字:

我没有给我机会输入姓氏 它跳到下一行


我正在使用EclipseIDE

输入
age
末尾的换行符将通过
fgets()获取picket
您需要在stdin缓冲区中刷新此换行符,以确保它不是由
fgets()
拾取的

使用

试试这个:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int age;
    int i;
    char last_name[20];
    char first_name[20];
    double wight;
    char gender[1];


    printf("Enter your age: ");
    scanf("%d", &age);
    printf("Enter your last name: ");
    __fpurge ( stdin );
    fgets(last_name, 18, stdin);
        i = strlen(last_name)-1;
        if( last_name[ i ] == '\n')
            last_name[i] = '\0';

    printf("Enter your first name: ");
    fgets(first_name, 18, stdin);
            i = strlen(first_name)-1;
            if( first_name[ i ] == '\n')
                first_name[i] = '\0';

    printf("Enter your wight: ");
    scanf("%lf", &wight);
    printf("Enter your gender m/f: ");
    __fpurge ( stdin );
    gets(gender);

    printf("You entered %s successfully\n ", first_name);
    return EXIT_SUCCESS;
}
#包括
#包括
内部主(空){
智力年龄;
int i;
char last_name[20];
char first_name[20];
双怀特;
性别[1];
printf(“输入您的年龄:”);
scanf(“%d”和年龄);
printf(“输入您的姓氏:”);
__fpurge(stdin);
fgets(姓氏18,标准名称);
i=斯特伦(姓氏)-1;
如果(姓氏[i]='\n')
姓氏[i]='\0';
printf(“输入您的名字:”);
fgets(名字,18,标准名称);
i=斯特伦(名字)-1;
如果(名字[i]='\n')
名字[i]='\0';
printf(“输入您的权限:”);
扫描频率(“%lf”、&wight);
printf(“输入您的性别m/f:”);
__fpurge(stdin);
获得(性别);
printf(“您成功输入了%s”,第一个\u名称);
返回退出成功;
}
如果我运行该程序,请输入您的年龄:23输入您的姓氏:输入您的名字:

这发生在代码中的第一个
scanf
之后:

scanf("%d", &age);
当您将
age
作为输入时,输入流中仍有换行符,您需要在进行下一次输入之前清除它:

scanf("%d", &age);
while(getchar() != '\n'); //eat up trailing newline
fgets(last_name, 18, stdin);
这是您更正的程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    int age;
    int i;
    char last_name[20];
    char first_name[20];
    double wight;
    char gender[1];


    printf("Enter your age: ");
    scanf("%d", &age);
    printf("Enter your last name: ");
    while(getchar() != '\n'); //eat up trailing newline
    fgets(last_name, 18, stdin);
        i = strlen(last_name)-1;
        if( last_name[ i ] == '\n')
            last_name[i] = '\0';

    printf("Enter your first name: ");
    fgets(first_name, 18, stdin);
            i = strlen(first_name)-1;
            if( first_name[ i ] == '\n')
                first_name[i] = '\0';

    printf("Enter your wight: ");
    scanf("%lf", &wight);
    printf("Enter your gender m/f: ");
    while(getchar() != '\n'); //eat up trailing newline
    gets(gender);

    printf("You entered %s successfully\n ", first_name);
    return EXIT_SUCCESS;
}

为什么不扫描(“%s”,名字)等等?不建议对输入流使用
fflush()
,因为没有指定输入流的行为。所以
fflush(stdin)
不应该被使用@是的,这就是为什么我给了一个很好的替代品
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    int age;
    int i;
    char last_name[20];
    char first_name[20];
    double wight;
    char gender[1];


    printf("Enter your age: ");
    scanf("%d", &age);
    printf("Enter your last name: ");
    while(getchar() != '\n'); //eat up trailing newline
    fgets(last_name, 18, stdin);
        i = strlen(last_name)-1;
        if( last_name[ i ] == '\n')
            last_name[i] = '\0';

    printf("Enter your first name: ");
    fgets(first_name, 18, stdin);
            i = strlen(first_name)-1;
            if( first_name[ i ] == '\n')
                first_name[i] = '\0';

    printf("Enter your wight: ");
    scanf("%lf", &wight);
    printf("Enter your gender m/f: ");
    while(getchar() != '\n'); //eat up trailing newline
    gets(gender);

    printf("You entered %s successfully\n ", first_name);
    return EXIT_SUCCESS;
}
Enter your age: 25
Enter your last name: last_Name
Enter your first name: First_Name
Enter your wight: 70
Enter your gender m/f: M
You entered First_Name successfully