使用 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=]';
代码:
#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
:
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=]';