我正在处理一个文件处理项目,用户可以指定他想要输入的次数,内容将以表格格式存储在文件中。我的代码是:
#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,名字)但没有用。所以我希望我能在这里得到一些帮助。问候。
答案 0 :(得分:5)
在循环之前你做
scanf("%d", &n);
它读取数字,但不是你终止输入的换行符,将换行符保留在输入缓冲区中。所以在你做的循环中
gets(name);
它将换行符读为空行。您需要从之前的scanf
电话中跳过所有剩余字符,包括换行符。例如,你可以有一个循环,你可以一次读取一个字符,直到你读完换行符。
作为旁注:请勿使用gets
。这是危险的,自C99标准以来已被弃用,并且最新的C11标准已完全删除。建议的替换为fgets
。
答案 1 :(得分:0)
尝试
scanf ("%s", &name);
这对我有用......如果没有,请发布它给你的输出,我会尝试提供更多帮助。
另外,一定要看看WhozCraig的评论并修复该错误。