我不确定我做错了什么,我做了类似的问题,但是读取数字并且它有效,这个程序假设要做的是在names.txt中读取此文档包含名称(last,first)< / p>
所以文字有
华盛顿,乔治
亚当斯,约翰
杰斐逊,托马斯 等....
我的程序读入名称,但输出不正确,输出为:
华盛顿,乔治
WAdams,GJohn
WAJefferson,GJThomas
所以当它读取下一行时,它会保留前一个名字的第一个字母?
#include <stdio.h>
int main(void)
{
char first_n[70];
char last_n[70];
int i=0;
FILE *oput;
FILE *iput;
iput = fopen( "names.txt","r" );
while ( fscanf( iput,"%s %s", &last_n[i],&first_n[i] ) != EOF )
{
i++;
printf("%s %s\n",last_n,first_n);
}
oput=fopen("user_name_info.txt","wt"); //opens output file
fprintf(oput, "Last\t\tFirst\n------------\t-------------\n%s\t%s\n",last_n,first_n);
return 0;
}
我做错了什么?
答案 0 :(得分:2)
first_n
和last_n
是字符数组(即想一个字符串)
你的fscanf
更像是在认为它们是一系列字符串。你正在每次读取字符串中的一个字符,即第一次通过你将字符串放在偏移0处,第二次通过它在偏移1处...
试试这个:
while ( fscanf( iput,"%s %s", last_n,first_n ) != EOF )
{
i++;
printf("%s %s\n",last_n,first_n);
}
您的最终打印将仅打印最后一次“记录”读取。也许你真的想要一个字符串数组? 这看起来有点像这样(我不是说这是解决问题的最佳方法,但它符合原始代码的精神......)
/* Limited to 20 names of 70 chars each */
char first_names[20][70];
char last_names[20][70];
int i=0;
FILE *oput;
FILE *iput;
iput = fopen( "names.txt","r" );
while ( fscanf( iput,"%s %s", &last_names[i],&first_names[i] ) != EOF )
{
printf("%s %s\n",last_names[i],first_names[i]);
i++;
}
oput=fopen("user_name_info.txt","wt"); //opens output file
i--; /* ensure i points to the last valid data */
while(i >= 0) {
fprintf(oput, "Last\t\tFirst\n------------\t-------------\n%s\t%s\n",last_names[i],first_names[i]);
i--;
}
return 0;