Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Scanf_Printf - Fatal编程技术网

在C语言中从文本文件中读取字符串并确定行尾

在C语言中从文本文件中读取字符串并确定行尾,c,string,scanf,printf,C,String,Scanf,Printf,我试图从空格和制表符分隔的文本文件中读取单词和数字。我需要识别包含“步骤”和“错误”的行。我还需要分别存储每个单词或数字,以便以后可以扔掉一些 我在尝试编写代码中在行尾标识“False”的部分时遇到困难。我需要代码识别它已达到False并中断for循环 注意:它的设计目的是让您输入自己的路径。这部分有效。另外,我读到fscanf比fgets和FPUT更难使用,但我读到的数据文件格式非常一致。这对我来说似乎很有效,因为有些条目需要双倍 int j; int k; char

我试图从空格和制表符分隔的文本文件中读取单词和数字。我需要识别包含“步骤”和“错误”的行。我还需要分别存储每个单词或数字,以便以后可以扔掉一些

我在尝试编写代码中在行尾标识“False”的部分时遇到困难。我需要代码识别它已达到False并中断for循环

注意:它的设计目的是让您输入自己的路径。这部分有效。另外,我读到fscanf比fgets和FPUT更难使用,但我读到的数据文件格式非常一致。这对我来说似乎很有效,因为有些条目需要双倍

    int j;
    int k;
    char i[4];                       
    char File_path[40];
    char dummy;
    char stuff[7] = "False"

    printf("Input Path: ");
    scanf("%s", &File_path);
    printf("Reading:  %s\n\n",File_path);
    FILE *fp;
    fp=fopen(File_path, "r");
    for(j=0; j<7 && i != stuff; j++)
    {
        fscanf(fp,"%s",i);
        fprintf(stdout,"Read:  %s\n",i);
    }
    fclose(fp);
这将返回:

Reading:  c:\\Data\\1.txt

Read:  True.0
Read:  kinda
Read:  false
Read:  False
Read:  False
Read:  False
Read:  False

我已尝试将stuff更改为“False”,但得到了相同的结果。

在C中不能以这种方式比较字符串。您需要使用
strcmp()
strncmp()
来执行此操作:

for (j = 0; j < 7 && strcmp(i, stuff); j++)
for(j=0;j<7&&strcmp(i,stuff);j++)
该循环条件将在
i
第一次指向
“False”
时中断。您还需要使
i
更大—在您的示例中,第一次读取时会使缓冲区溢出


社论-您可能真的想使用
fgets()
strtok()
或它的一个亲戚来处理这些东西。

至于缓冲区,我假设缓冲区是自动扩展的。出于这个原因,我故意把它弄得太小了。我见过一些函数,它们会根据需要自动扩展。因为它即使没有分配正确的长度也能复制,所以我认为它复制的是正确的。我想情况并非如此,但这并不能解释为什么字符串仍然复制正确。我最初是用MATLAB学习的,所以我的内存分配知识很差。我刚刚看到了函数atof。这应该允许我使用gets。谢谢据我所知,缓冲区的自动扩展在C语言中从未发生过。也许有一些疯狂的库可以在其他情况下工作,但即使是这些库也不能改变数组的大小。
for (j = 0; j < 7 && strcmp(i, stuff); j++)