【问题标题】:c programming language exercise 3-2 print escape characters in arrayc编程语言练习3-2在数组中打印转义字符
【发布时间】:2016-11-06 21:47:12
【问题描述】:

我想将换行符和制表符等转义字符打印到 \n 和 \t 等可见转义序列中,所以我认为我应该先打印两个 \,然后再打印 n 以打印可见 \n。但它不起作用。答案打印 n 然后两个 \ 并且它有效。我不知道为什么。这是我的代码。

case  '\n' :
     s[j] = '\\';
     s[j++] = 'n';
     break;

这就是答案

 case '\n':
        s[j++] = '\\';
        s[j] = 'n';
        break;

谢谢!

【问题讨论】:

  • 一切都与++有关。 j++ 表示“使用 j 的当前值,然后递增它。所以你的这样做:j[0] = '\\'; j[0] = 'n'; j = j + 1。你想要s[j] = '\\'; s[++j] = 'n'++j 表示递增 j 的值然后使用它)
  • 哦,谢谢!我想知道并没有发现。我不知道如何将 cmets 设置为答案。你介意在答案中回答吗?
  • 这个问题是一个基本的 C 语法问题,可能不会为 SO 增加价值(人们甚至可能会说这个问题应该因此而关闭)。提出答案不仅只是在重复销售,而且可能会阻止问题被删除,因为没有附加价值。 (无意冒犯)

标签: c switch-statement escaping


【解决方案1】:

您需要了解以下有关增量/减量的信息:

  1. 将它们用作完整语句(单独使用)时,i++++i 是等效的。

  2. 1234563将首先增加i的值,然后计算表达式。

因此:

int s[2] = {6,7};
int i = 0;
printf("%d", s[i++]);  //prints 6 then sets i equal to 1

int s[2] = {6,7};
int i = 0;
printf("%d", s[++i]);  //Sets i equal to 1 then prints 7

在您的情况下,这意味着当您使用 s[j++] 时,您使用的 j 与上面一行中的相同,然后再增加它(从而覆盖您刚刚设置的 s[j] 的值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多