使用 fgets 和 scanf 在 for 循环中读取用户输入两次

Read user input twice in a for-loop using fgets and scanf

代码:

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

int main(){
    struct mobile{
        char N[10];
        int ram, pixel, price;
    }B[5];
    int min;
    char trash;

    for(int i = 0; i < 5; i++){
        printf("Enter Mobile Name: ");
        fgets(B[i].N, sizeof(B[i].N), stdin);
        printf("Enter features (ram/camera pixels/price): ");
        scanf("%d%d%d", &B[i].ram, &B[i].pixel, &B[i].price);
        printf("\n");
    }
}

程序第二次不接受手机名称的值。它打印 Enter mobile name 但不取值,然后打印 Enter features 并询问值。我尝试在 printf("\n"); 上方添加第二个 scanf 但没有成功。请帮助。谢谢

从缓冲区

中删除\n

scanf 在缓冲区中留下一个换行符,然后由 fgets 读取。另一个问题是,您没有使用定界符来划分用户输入,所以我会在类型说明符 %d:

之间放置一个 space 或斜杠
scanf("%d/%d/%d\n", &B[i].ram, &B[i].pixel, &B[i].price);

输入应该是这样的:

Enter specs (ram/pixels/price): 8/12/500

正在读取结尾字符 \n,但它没有存储在任何变量中。

fgets() 输入中删除 \n

这不会导致您的问题,但我也会从 fgets() 输入中删除尾随 \n,因为它可能不应该是 phone 的一部分'名字.

#include <string.h>

fgets(B[i].N, sizeof(B[i].N), stdin);
B[i].N[strcspn(B[i].N, "\n")] = '[=12=]';