C语言 如何打印出空格和新行的位置?

xuo3flqw  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(186)

我试图从一个文件中写的文本中打印出空格和新行的位置,但它什么也不打印,我不能弄清楚问题是什么。
这只是问题的一部分,所以请忽略其他定义的东西,我还没有使用。
文本文件:

Mi illumino di immenso
Illumino di immenso
Di immenso
IMMENSO

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define N 100
int main()
{
    FILE *file,*file2;
    file=fopen("file","r");

    if(file==NULL || file2==NULL)
    {
        printf("Error");
        exit(1);
    }
    int i=0,j=0,k=0,p=0;
    int v[50];
    char str[N];
    int iteration=0;
    char str1[N];

    while(fscanf(file,"%s",str)!=EOF)
    {

        for(i=0; i<strlen(str); i++)
        {
            if(str[i]==' ')
            {
                v[j]=i;
                j++;

            }
            if(str[i]=='/n')
            {
                v[j]=i;
                j++;
            }
        }
    }
    for(i=0;i<j;i++)
    {
        printf("%d",v[i]);
    }

    return 0;
}
rvpgvaaj

rvpgvaaj1#

  1. fscanf(..., "%s", str)读取白色分隔的单词,因此str永远不会包含空格或换行符。您可以使用%[^\n]\n读取带有空格的字符串,但str不会包含换行符。您也可以使用%[a-zA-Z \n]指定您想要的内容。
    1.“\n”应为“/n”。
    1.如果你使用fgets()而不是fscanf(),你将重置每行的i。不清楚这是否是你想要的。
  2. str[N]v[50]最坏的情况是str,它由所有空格和/或换行符组成,所以它应该是v[N]
    1.在最后一个循环中,您不使用任何字段分隔符。
    1.空格和换行符做同样的事情,所以组合这两个if条件。
    1.删除未使用的变量(file2kp)。
    1.关闭文件。
    1.由于格式化,代码很难阅读。
#include <stdio.h>
#include <string.h>

#define N 100

int main() {
    FILE *file = fopen("file", "r");
    if(!file) {
        printf("Error");
        return 1;
    }

    char str[N];
    int j=0;
    int v[N];
    for(;;) {
        char *rv = fgets(str, N, file);
        if(!rv)
            break;
        size_t str_len = strlen(str);
        for(int i=0; i < str_len; i++) {
            if(str[i]==' ' || str[i] == '\n')
                v[j++] = i;
        }
    }
    for(int i=0; i<j; i++) {
        printf("%d ",v[i]);
    }

    fclose(file);
}

示例输出:

2 11 14 22 8 11 19 2 10 7

相关问题