gpt4 book ai didi

无法弄清楚这个循环行为

转载 作者:行者123 更新时间:2023-12-01 06:14:36 24 4
gpt4 key购买 nike

我正在开发一个文件处理项目,其中用户将指定他想要进行输入的次数,并且内容将以表格格式存储在文件中。我的代码是:

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

int main(void)
{
int n;
FILE *fptr;
fptr=fopen("input.txt", "w");

if(fptr==NULL)
printf("The file could not be opened.");

printf("\nFile opened successfully.");

printf("\nHow many inputs do you want to make?");
scanf("%d", &n);

printf("\nEnter contents: \n\n");

char name[50];
int age;
float salary;
int i;

for(i=1;i<=n;i++)
{
printf("\nName(Not more than 50 character): ");
gets(name);

if(name[strlen(name)-1]=='\n')
name[strlen(name)-1]='\0';

printf("\nAge: ");
scanf("%d", &age);

printf("\nSalary: ");
scanf("%f", &salary);

fprintf(fptr, "%s\t\t%d\t$%.2f\n", name, age, salary);
}
}

我遇到的问题是循环无法正确执行。我无法输入名字。它会跳过姓名并直接进行年龄输入。我尝试了 fgets(), scanf("%[^\n]s, name) 但没有效果。所以我希望我能在这里得到一些帮助。问候。

最佳答案

在循环之前

scanf("%d", &n);

读取数字,但不读取终止输入的换行符,并将换行符保留在输入缓冲区中。所以当你这样做时在循环中

gets(name);

它将换行符读取为空行。您需要跳过上一次 scanf 调用中的所有剩余字符,包括换行符。例如,您可以有一个循环,一次读取一个字符,直到读取换行符为止。


附注:不要使用gets。它很危险,自 C99 标准以来已被弃用,并在最新的 C11 标准中完全删除。推荐的替代品是fgets

关于无法弄清楚这个循环行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36418817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com