【发布时间】:2014-06-26 11:29:10
【问题描述】:
我尝试在 code::blocks 中运行该程序以显示名称列表,但在 fprintf 处停止执行。我尝试了另一个使用 fprintf 的程序(如下所示),它似乎工作正常
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
FILE *ptr;
ptr=fopen("D:\\test.txt","w+");
char a[5];
char i='a',j='a',k='a',l='a';
a[0]='l';
a[1]='a';
for(i='a';i<=121;i++)
{
a[2]=i;
for(j='a';j<=121;j++)
{
a[3]=j;
switch(j)
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
for(k='a';k<=121;k++)
{
a[4]=k;
for(l='a';l<=117;l++)
{
switch(l)
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':{a[5]=l;fprintf(ptr,"%s",a);}
}
}
}
}
fclose(ptr);
return 0;
}
这是完美运行的程序
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
main()
{
char a[50],b[50];
printf("Enter a name\n");
gets(b);
FILE *ptr;
ptr=fopen("D:\\test.txt","w+");
fprintf(ptr,"%s",b);
rewind(ptr);
fscanf(ptr,"%s",&a);
printf("%s",a);
fclose(ptr);
}
【问题讨论】:
-
执行停止可能意味着什么。在使用结果之前,您应该检查
fopen()是否有效。在使用%s打印它们之前,您还应该确保您的字符串为空终止,或者确保将打印的长度限制为有效的长度。您可能也希望在输出中的某处换行。另外,永远不要使用gets()。甚至在演示代码中也没有。这是一个坏习惯。它不再是标准 C 的一部分。您应该使用'z'代替 121,并使用'u'代替 117。