C 中的文件处理错误
File Handling Error in C
我正在学习 C.I 中的文件处理有这段代码,但它不接受字符串作为输入将其写入 file.Any 帮助将不胜感激。
#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);
}
在 运行 这段代码中,代码在 Enter Name 后不接受输入,直接跳到 Enter No.I 希望输出为表格形式。
输入 id 后使用 getchar(),因为第一次 scanf 的 \n 保留在缓冲区中。
printf("Enter id input \n");
scanf("%d",&a);
getchar();
当您为 scanf("%d",&a);
输入数字时,您输入一个数字并按 Enter 键。 scanf
消耗数字并在标准输入流 (stdin
) 中留下换行符 ('\n'
)。当程序执行到gets(name);
时,gets
看到换行符并消费掉,存入name
.
首先,永远不要使用 gets
as it is dangerous as it doesn't prevent buffer overflows. Use fgets
代替:
fgets(name, sizeof(name), stdin);
其次,你必须去掉换行符。您可以通过 flushing the stdin
来完成此操作。或者您可以通过更改
从 scanf
读取数字后简单地扫描并丢弃换行符
scanf("%d",&a);
至
scanf("%d%*c",&a);
%*c
扫描并丢弃一个字符。
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;
}
我正在学习 C.I 中的文件处理有这段代码,但它不接受字符串作为输入将其写入 file.Any 帮助将不胜感激。
#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);
}
在 运行 这段代码中,代码在 Enter Name 后不接受输入,直接跳到 Enter No.I 希望输出为表格形式。
输入 id 后使用 getchar(),因为第一次 scanf 的 \n 保留在缓冲区中。
printf("Enter id input \n");
scanf("%d",&a);
getchar();
当您为 scanf("%d",&a);
输入数字时,您输入一个数字并按 Enter 键。 scanf
消耗数字并在标准输入流 (stdin
) 中留下换行符 ('\n'
)。当程序执行到gets(name);
时,gets
看到换行符并消费掉,存入name
.
首先,永远不要使用 gets
as it is dangerous as it doesn't prevent buffer overflows. Use fgets
代替:
fgets(name, sizeof(name), stdin);
其次,你必须去掉换行符。您可以通过 flushing the stdin
来完成此操作。或者您可以通过更改
scanf
读取数字后简单地扫描并丢弃换行符
scanf("%d",&a);
至
scanf("%d%*c",&a);
%*c
扫描并丢弃一个字符。
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;
}