标签: kr-c

K&R C练习帮助

我一直在阅读K&R C编程语言书,我坚持练习2-6,内容如下:

写一个函数setbits(x,p,n,y)返回x,其中n位从位置p开始,设置为y的最右边n位,其他位保持不变.

我无法理解他们正在寻找我的确切事情.我在这里看了一个可能的答案,但我仍然不太明白.我认为这是让我失望的措辞.任何人都可以用不同的方式解释他们想要我做什么吗?我希望不同的措辞能帮助我理解我需要做的代码.

c binary kr-c bit-manipulation

7
推荐指数
1
解决办法
1835
查看次数

如何转换K&R C至ANSI C?

我正在尝试执行以下代码,这是1988年的混淆C代码竞赛条目.

#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}
Run Code Online (Sandbox Code Playgroud)

从条目描述中,此代码通过查看其自己的区域来计算pi.我成功编译它而不更改代码.但是当我执行时,它给了我0.25的值,我期待的是3.14.代码描述表明它在K&R C中,如果没有一些更改,它在ANSI C中无法正常工作.我想我必须做那些修改才能正确执行它.我以前没有K&R C的经验.所以有人可以帮助我将上述代码更改为ANSI C或指出问题(如果有的话).我正在使用Microsoft Visual Studio 2008来执行此操作.

c obfuscation kr-c

6
推荐指数
1
解决办法
1142
查看次数

K&R练习1-21 - 精神上的不理解

"不可能"的K&R练习.

"编写一个程序entab,用最小数量的制表符和空格替换空白字符串以达到相同的间距.使用相同的制表位,比如每n列.应该是变量还是符号参数?"

我遇到的问题是,我不确定如何正确地做到这一点.我知道这不是很解释,但这就是问题所在.我见过的大多数例子都计算了一些空白,用一个标签取代了那些系列,但这并不是它的要求,我认为我理解它的要求,但目前感觉无法做到这一点.

谁能帮忙:)

编辑:到目前为止我写的代码可以在这里找到.

c kr-c

6
推荐指数
2
解决办法
2718
查看次数

我不懂K&R书中的itoa()

我正在读K&R; 到目前为止,我做得很好,但有一些功能itoa()我不明白.在这里,itoa()他们说他们自己扭转数字.例如10是01(它们反转字符串):

void itoa(int n, char s[])
{
    int i, sign;
    if ((sign = n) < 0) /* record sign */
        n = -n; /* make n positive */
    i = 0;
    do { /* generate digits in reverse order */
        s[i++] = n % 10 + '0'; /* get next digit */
    } while ((n /= 10) > 0); /* delete it */
    if (sign < 0)
        s[i++] = '-';
    s[i] = '\0';
    reverse(s);
    return; …
Run Code Online (Sandbox Code Playgroud)

c kr-c

5
推荐指数
1
解决办法
1410
查看次数

k&r与位操作混淆

练习是:写一个函数setbits(x,p,n,y)返回x,其中n位从位置p开始,设置为y的最右边n位,其他位保持不变.

我尝试解决方案是:

#include <stdio.h>

unsigned setbits(unsigned, int, int, unsigned);

int main(void)
{
    printf("%u\n", setbits(256, 4, 2, 255));
    return 0;
}

unsigned setbits(unsigned x, int p, int n, unsigned y)
{
    return (x >> (p + 1 - n)) | (1 << (n & y));
}
Run Code Online (Sandbox Code Playgroud)

这可能不正确,但我在正确的道路上吗?如果没有,我做错了什么?我不确定为什么我不完全理解这一点,但我花了大约一个小时试图想出这个.

谢谢.

c kr-c bit-manipulation

5
推荐指数
1
解决办法
1689
查看次数

关于C的K&R书中的示例1.5.2的问题

我正在用K&R教自己C并且被本书中的一个例子所困扰.我完全按照示例中编写的方式编译代码,但它不会像作者所说的那样做.该程序应该计算字符数.给出的代码如下:

#include <stdio.h>

/* count characters in input; 1st version */
main()
{
    long nc;
    nc=0;
    while (getchar() != EOF)
     ++nc;
    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

为了编译它我用int main()替换main().但我认为这与问题无关.该程序编译并运行正常.但它根本不计算字符,因为它是写的.我错过了什么吗?自从本书出版以来,现代编译器如何处理代码示例这样的事情会有所改变吗?任何有关此留言板上的好人可能提供的帮助将不胜感激.

最好,丹

c kr-c

5
推荐指数
3
解决办法
1947
查看次数

指向整数数组和正常整数数组的指针

在KR C book 112页中,它说:

int (*arr1)[10];
Run Code Online (Sandbox Code Playgroud)

是一个指向10个整数数组的指针.我不知道上面和下面有什么区别:

int arr2[10];
Run Code Online (Sandbox Code Playgroud)

1- arr2本身不是指向10个整数数组的指针吗?(因为数组的名称本身就是指针.)

2-如果数组的名称是阵列地址和指针数组,则两个arr1arr2是指向整数数组,是不是这样的吗?

c arrays types pointers kr-c

5
推荐指数
1
解决办法
807
查看次数

写入c-string

我的代码段错误,我不知道为什么.

 1  #include <stdio.h>
 2
 3  void overwrite(char str[], char x) {
 4    int i;
 5    for (i = 0; str[i] != '\0'; i++)
 6      str[i] = x;
 7  }
 8
 9  int main(void) {
10    char *s = "abcde";
11    char x = 'X';
12    overwrite(s, x);
13    printf("%s\n", s);
14    return 0;
15  }
Run Code Online (Sandbox Code Playgroud)

gdb调试器告诉我,问题出在第6行,我想将一个char存储到c-string中(如果我使用左值指针解除引用,那就是同样的问题.)这就是他所说的:

(gdb) run
Starting program: /tmp/x/x 

Breakpoint 1, overwrite (str=0x8048500 "abcde", x=88 'X') at x.c:5
5         for (i = 0; str[i] != '\0'; i++) …
Run Code Online (Sandbox Code Playgroud)

c kr-c c-strings cstring segmentation-fault

3
推荐指数
1
解决办法
1078
查看次数

使用xcode学习C(通过K&R)

我正在用C编程语言(K&R)学习C 语言.

由于我不特别想在文本编辑器和运行gcc之间来回跳转,所以我决定使用xcode作为IDE.到目前为止,在第1.5.2节之前,我已经能够顺利地阅读本书的示例.

给定有效(?)程序时......

#include <stdio.h>

void main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}
Run Code Online (Sandbox Code Playgroud)

...我没有收到最终输出,告诉我输入中有多少个字符.我通过xcode控制台窗口输入我的输入.

经过一些调试,看起来我的程序卡在while循环中,并且永远不会遇到EOF令牌.为了适应这一点,我已经不是取代换行符作为新的条件下,通过更换EOF"\n",也什么都不做,并给了我一个int值指针比较预警.

我在这做错了什么?

我可以使用xcode关注K&R吗?

c xcode kr-c while-loop

3
推荐指数
1
解决办法
1011
查看次数

这个奇怪的C++定义是什么意思?

我的作业代码中有这个奇怪的函数定义,我真的不知道它应该是什么意思.

char *
sh_single_quote (string)
char *string;
{...}
Run Code Online (Sandbox Code Playgroud)

特别是"char*string;" 一行,最后用分号.

c kr-c function definition

3
推荐指数
1
解决办法
186
查看次数