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

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

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

  1. Mi illumino di immenso
  2. Illumino di immenso
  3. Di immenso
  4. IMMENSO

我的代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #define N 100
  6. int main()
  7. {
  8. FILE *file,*file2;
  9. file=fopen("file","r");
  10. if(file==NULL || file2==NULL)
  11. {
  12. printf("Error");
  13. exit(1);
  14. }
  15. int i=0,j=0,k=0,p=0;
  16. int v[50];
  17. char str[N];
  18. int iteration=0;
  19. char str1[N];
  20. while(fscanf(file,"%s",str)!=EOF)
  21. {
  22. for(i=0; i<strlen(str); i++)
  23. {
  24. if(str[i]==' ')
  25. {
  26. v[j]=i;
  27. j++;
  28. }
  29. if(str[i]=='/n')
  30. {
  31. v[j]=i;
  32. j++;
  33. }
  34. }
  35. }
  36. for(i=0;i<j;i++)
  37. {
  38. printf("%d",v[i]);
  39. }
  40. return 0;
  41. }
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.由于格式化,代码很难阅读。
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 100
  4. int main() {
  5. FILE *file = fopen("file", "r");
  6. if(!file) {
  7. printf("Error");
  8. return 1;
  9. }
  10. char str[N];
  11. int j=0;
  12. int v[N];
  13. for(;;) {
  14. char *rv = fgets(str, N, file);
  15. if(!rv)
  16. break;
  17. size_t str_len = strlen(str);
  18. for(int i=0; i < str_len; i++) {
  19. if(str[i]==' ' || str[i] == '\n')
  20. v[j++] = i;
  21. }
  22. }
  23. for(int i=0; i<j; i++) {
  24. printf("%d ",v[i]);
  25. }
  26. fclose(file);
  27. }

示例输出:

  1. 2 11 14 22 8 11 19 2 10 7
展开查看全部

相关问题