我正在学习C.中的文件处理。我有这段代码但它不接受字符串作为输入将它写入文件。任何帮助将不胜感激。
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int main(void)
{
FILE * fp1;
fp1 = fopen("abc.txt","a+");
if(fp1==NULL)
{printf("An error occurred");
}
printf("Delete file?\n");
int a,c;
char name [20];
int flag=1;
int ch=1;
while(flag!=0)
{
printf("Enter id input \n");
scanf("%d",&a);
fprintf(fp1,"\n%d\t",a);
printf("Enter Name");
gets(name);
fputs(name, fp1);
printf("Enter No \n");
scanf("%d",&c);
fprintf(fp1,"\t%d\t",c);
printf("Write more then press 0 else 1");
scanf("%d",&ch);
if(ch==1)
{
flag=0;
}
}
fclose(fp1);
}
在运行此代码时,代码在输入名称后不接受输入,并直接跳到输入否。我希望输出以表格形式。
答案 0 :(得分:2)
输入id后使用getchar(),因为第一个scanf的\ n保留在缓冲区中。
printf("Enter id input \n");
scanf("%d",&a);
getchar();
答案 1 :(得分:1)
输入scanf("%d",&a);
的号码时,输入一个数字,然后按 Enter 键。 scanf
使用该数字并在标准输入流('\n'
)中保留换行符(stdin
)。当程序执行到gets(name);
时,gets
会看到换行符并使用它,并将其存储在name
中。
首先,永远不要使用gets
as it is dangerous,因为它不会阻止buffer overflows。请改用fgets
:
fgets(name, sizeof(name), stdin);
其次,你必须摆脱换行符。您可以flushing the stdin
执行此操作。或者,您只需在通过更改
scanf
读取数字后立即扫描并丢弃换行符
scanf("%d",&a);
到
scanf("%d%*c",&a);
%*c
扫描并丢弃一个角色。
答案 2 :(得分:0)
gets()
已被弃用,请勿使用它。你仍然可以使用scanf()
......
至于制表......想一想。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
FILE* fp1;
fp1 = fopen("abc.txt", "a+");
if (fp1 == NULL) {
printf("An error occurred");
}
int a, c;
char name [20];
int flag = 1;
int ch = 1;
while (flag != 0) {
printf("Enter id input:\n");
scanf("%d", &a);
fprintf(fp1, "%d\t", a);
printf("Enter Name:\n");
scanf("%s", name);
fprintf(fp1, "%s\t", name);
printf("Enter No:\n");
scanf("%d", &c);
fprintf(fp1, "%d\n", c);
printf("Again (0) or Exit(1) ?:\n");
scanf("%d", &ch);
if (ch == 1) {
flag = 0;
}
}
fclose(fp1);
return 0;
}