【问题标题】:How to compare an integer with newline in C?如何在C中将整数与换行符进行比较?
【发布时间】:2014-04-11 02:49:16
【问题描述】:

我已经知道如何将 char 类型与换行符 (\n) 进行比较,但我想知道如何将整数与换行符 (\n) 进行比较。是否可以? (我进行了研究以找到我的答案,但我最终得到了需要 char 类型的答案)

我输入了带有数字的文本文件:

11 22 33 44 55 1
2 3 4 56 777
1
255
3
5

我希望输出看起来像这样

[11][22][33][44][55][1]<newline>[2][3][4][56][777]<newline>[1]<newline>[255]<newline>[3]<newline>[5]<newline>
lineNumber:[6]

但我得到的输出是

[11][22][33][44][55][1][2][3][4][56][777][1][255][3][5]
lineNumber:[0]

这是我正在使用的代码

int *integers = malloc(sizeof(int) * 200);
int i=0, lineNumber=0, num=0;
//int num;

while(fscanf(file, "%d", &num) > 0) 
{       
    if(num == '\n'){
        printf("<newline>");
        lineNumber++;
    }

    integers[i] = num;

    printf("[%d]", integers[i]); // Just to show output.
    i++;
}
printf("\nlineNumber:[%d]", lineNumber);

我不想使用 char 类型的原因是因为我必须将 char 数字重新转换为整数...我只想关心换行符 (\n) 和整数

【问题讨论】:

  • 由于空格跳过,您的 if-case 将永远无法满足。有关更多信息,请参阅fscanf() 的文档。然后查看fgets()sscanf 了解替代方案。

标签: c integer compare newline


【解决方案1】:

您可以尝试在每个整数后读取一个换行符,然后检查 fscanf 的返回以查看读取了多少项。

int *integers = malloc(sizeof(int) * 200);
int i=0, lineNumber=0, num=0;
int read;
char nl[2];

while((read=fscanf(file, "%d%[\n]", &num, &nl)) > 0) 
{       

    integers[i] = num;

    printf("[%d]", integers[i]); // Just to show output.
    i++;

    if(read == 2){
        printf("<newline>");
        lineNumber++;
    }
}
printf("\nlineNumber:[%d]", lineNumber);

【讨论】:

  • 它检测到换行但它有一个副作用,它改变了新行之前的数字的值。如果低于 768,它给出数字“0”,如果低于“1024”,它给出“768”。 (减去 256)。
  • @LordRixuel 尝试使用 nl as char[2] 而不是 char
  • 确实有效,非常感谢。数字 2 表示 %[\n] 对吗?而 1 是 %d?
  • if(read == 2) 表示读取了 2 个项目,第一个是数字,第二个是换行符。
猜你喜欢
  • 1970-01-01
  • 2016-01-16
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2017-12-13
  • 1970-01-01
相关资源
最近更新 更多