C 程序没有按照问题中的要求提供所需的输出
我正在解决这个问题: 写一个程序来读取一个文件,并用它的行号显示内容 以下是我编写的代码:C 程序没有按照问题中的要求提供所需的输出,c,file,C,File,我正在解决这个问题: 写一个程序来读取一个文件,并用它的行号显示内容 以下是我编写的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> void lineprint(int *line){ *line=*line+1; printf ("Line %d",line); } int main(){ FILE *fp; fp=fopen(
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void lineprint(int *line){
*line=*line+1;
printf ("Line %d",line);
}
int main(){
FILE *fp;
fp=fopen("sample.txt","r");
if (fp==NULL){
printf ("File not Found");
exit(0);
}
else {
int line=1;
printf ("Line %d\n",line);
while ((fgetc (fp))!=EOF){
printf ("%c",fgetc(fp));
if ((fgetc(fp))=='\n'){
lineprint(&line);
}
}
}
fclose (fp);
return 0;
}
#包括
#包括
#包括
虚线打印(整数*线){
*行=*行+1;
printf(“行%d”,行);
}
int main(){
文件*fp;
fp=fopen(“sample.txt”,“r”);
如果(fp==NULL){
printf(“未找到文件”);
出口(0);
}
否则{
内线=1;
printf(“行%d\n”,行);
而((fgetc(fp))!=EOF){
printf(“%c”,fgetc(fp));
如果((fgetc(fp))='\n'){
线条打印(&L);
}
}
}
fclose(fp);
返回0;
}
然而,我得到了垃圾输出。请帮忙。这应该行得通。您应该将读取的字符保存到一个变量中,以后再使用它。此外,您还应该再次检查指针(derefernce是您正在寻找的)
#包括
#包括
虚线打印(整数*线){
(*行)++;/*先解除引用*/
printf(“行%d\n”,*行);/*此处取消引用*/
}
内部主(空){
文件*fp;
fp=fopen(“sample.txt”,“r”);
如果(fp==NULL)
{
printf(“未找到文件”);
出口(0);
}
其他的
{
内线=1;
int c=0;
printf(“行%d\n”,行);
当((c=fgetc(fp))!=EOF)/*将读取的字符保存到变量中时,请稍后使用*/
{
printf(“%c”,c);
如果(c=='\n'){
线条打印(&L);
}
}
}
fclose(fp);
返回0;
}
因此,基本上,当调用fgetc()时,结构文件的内部指针将返回文件中的第一个字符大小数据,并将指针移动sizeOf(char)。
此外,您没有增加line的值。
我对代码做了一些调整,它起作用了
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *fp;
int letter;
fp=fopen("test.txt","r");
if (fp==NULL){
printf ("File not Found");
exit(0);
}
else {
int line=1;
printf ("Line %d\n",line);
while ((letter = fgetc(fp))!=EOF){
printf ("%c",letter);
if (letter =='\n'){
line++;
printf ("Line %d\n",line);
}
}
}
fclose (fp);
return 0;
}
#包括
#包括
int main(){
文件*fp;
整数字母;
fp=fopen(“test.txt”、“r”);
如果(fp==NULL){
printf(“未找到文件”);
出口(0);
}
否则{
内线=1;
printf(“行%d\n”,行);
而((字母=fgetc(fp))!=EOF){
printf(“%c”,字母);
如果(字母=='\n'){
line++;
printf(“行%d\n”,行);
}
}
}
fclose(fp);
返回0;
}
希望它能帮助你,如果你有任何问题,我很乐意尝试回答=)阅读一些你的编译器的文档(可能用作
gcc-Wall-Wextra-g
)和你的调试器的文档(例如……)@BasileStarynkevitch您能用更简单的术语解释一下吗?@GirG您能提供sample.txt
文件的一部分吗?每次调用fgetc
,都会从输入流中提取一个字符(如果可用)。您的代码使用一个字符并检查EOF
。然后它取一个不同的字符并打印出来。现在第一个丢了。然后,它接受一个不同的字符并将其与'\n'
进行比较。如果它不是'\n'
,则其值将丢失。重写代码,使其调用fgetc
一次,并将结果存储在int
中。然后使用该int
的值来决定是否有EOF、要打印的字符或新行字符。@BasileStarynkevitch:这没有帮助。我也希望Stack Overflow不会遇到很多完全的新手问题,但这样的评论没有帮助,会被认为是snide。只有一个问题,为什么使用int c而不是charc@GirG简单的回答,如果您想在文件中使用ASCII以外的其他字符集。@alex01011:int
不需要处理非ASCII字符char
通常可以做到这一点,尽管无符号char
更好<需要code>int,因为fgetc
的返回值可能是EOF
,这不是字符值。@EricPostChil我同意你的评论,我没有提到EOF,因为我只想给出一个简单的答案:)
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE *fp;
int letter;
fp=fopen("test.txt","r");
if (fp==NULL){
printf ("File not Found");
exit(0);
}
else {
int line=1;
printf ("Line %d\n",line);
while ((letter = fgetc(fp))!=EOF){
printf ("%c",letter);
if (letter =='\n'){
line++;
printf ("Line %d\n",line);
}
}
}
fclose (fp);
return 0;
}