【问题标题】:Iterate through a character in C遍历C中的一个字符
【发布时间】:2020-03-23 09:37:48
【问题描述】:

我来自 Fortran 社区,请原谅我提出这么简单的问题。

我有以下:

 char temp_line[250];
  char *line;

  // read in a file and get first line 
    line = fgets(temp_line, 250, fp) ; 

    // Now I want to iterate through each character in line 
    // my line in reality reads: "H AR    "
    // So I want to get from the loop my first increment will be H, then empty string, then "A" then "R" etc. 

    // I am doing following 
     for (int j =0; line[j] != '\0';j++) printf("%i : %s",j, &line[j])

   // the results is:

   // 0 : H AR    
   // 1 :  AR 
   // 2 : AR
   // 3 : R

似乎是在逆向发展。有人可以向新的 C 开发人员解释为什么会发生这种情况,以及如何实现我的目标吗?

【问题讨论】:

标签: c string character


【解决方案1】:

%s 打印一个以空字符结尾的字符串,即从printf 参数指向的字符开始的多个字符,直到遇到空字符。

如果要打印单个字符,则需要%c,然后printf 的对应参数应该是int(或提升char),而不是char*,所以只需@987654328 @,不是&line[j]。

此外,您还需要检查fgets 的返回值是否为null,以验证它是否成功。

【讨论】:

  • 好的,这就是我要找的。我知道这不是问题的一部分。但我最初想在strcmp 函数中使用这些单个字符。我是只使用 fprintf 写入单个 char 变量还是有另一种方法因为我不能使用 line[j] 作为 strcmp 的参数
  • @ATK 我不确定你的意思。您不需要strcmp 来比较单个字符。您可以直接将它们与== 进行比较。需要strcmp 来比较两个以空字符结尾的字符串。
  • 好的,我想我明白了。所以我可以简单地做:line[j] == "!" 到例如检查该字符是否有“!”
  • @ATK 不完全是,"!" 是一个字符串文字。它基本上是一个指向以空字符结尾的字符串的指针。如果要比较字符,则需要一个字符文字,即'!'.
  • 干杯这行得通。我需要阅读字符串/字符在 c 中的工作方式。感谢您的帮助!
猜你喜欢
  • 2015-05-22
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多