Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 程序没有按照问题中的要求提供所需的输出_C_File - Fatal编程技术网

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;
}