小编Jas*_*per的帖子

使用 swap() 而不#include 其库?

我有一个简单的程序,我在其中int按升序或降序排列数组的元素,然后使用该swap()函数来移动元素。我编译的程序没有任何错误,它运行得非常好。后来我才注意到,我在编译之前忘记#includeswap()(<algorithm><utility>as of C++11) 中定义的库。

为什么它仍然有效?我的程序的顶部是这样的:

#include <iostream>
#include <cstdlib>
using namespace std;
Run Code Online (Sandbox Code Playgroud)

我尝试取出<iostream>,只是想看看会发生什么,它可以预见地抛出一堆'cout/cin/endl' was not declared in this scope错误,但我惊讶地发现它也给出了一些'swap' was not declared in this scope错误。这是否意味着swap()在 中定义<iostream>?我觉得不应该是吧?

无论如何,对于一个简单的答案来说,这可能是一个很长的问题,但我很好奇。我还在学习CC++,所以我不知道很多的事情,我无法找到答案通过“全能”谷歌机这个特殊的神秘感,所以我在这里。

提前致谢!

c++ swap c++11

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

字符输入导致 C 中的无限循环

好了,我已经搜索几个地方的答案,这一点,我找到了答案,在同样的问题C++,但它涉及结算cin和东西,我不知道如何翻译,要C。如果这实际上是在其他地方回答的,我提前道歉,我只是错过了。另外,请记住,我基本上是在自学C,除了您在此代码中看到的内容之外,我不知道太多。

基本上,我的问题是这样的:我正在运行一个循环,要求输入,然后使用switch语句来选择发生的情况。在switch接受一个int,它工作正常使用任何数字输入。char但是,当您输入 a时,它只是无限循环,没有机会输入任何其他内容。

假设这与C++我查找的示例中的问题相同- 我不是 100% 确定 - 当我输入时,char它会被添加到缓冲区中,并且永远不会被清除,因此每次它都会循环无效再次使用输入。清除缓冲区C++C.

这是我的代码,供参考:

int main()
{


  while(1)
  {
    printf("(1-10) -> Run a program | (-1) -> Display menu | (0) -> Quit : ");

    int quit = 0;
    int select;
    scanf("%d", &select);
    switch(select)
    {
      case 1:
        printf("%s", pgmRun);
        helloWorld();
        printf("%s", pgmEnd);
        break;

      //More cases here

      case 0:
        quit = …
Run Code Online (Sandbox Code Playgroud)

c infinite-loop

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

释放指向'double'值的指针

我能找到的所有关于释放'双'指针的东西都指的是释放指针的指针,这不是我所说的.我已经想出了如何做到这一点.

它甚至可能不是一个大的事情在所有,但我注意到,当我free()一个int,charfloat指针,价值被删除或垃圾值替换,但是当我free()一个double指针,该值保持不变.

这是我测试过的代码:

int main()
{
  int *p_a = malloc(sizeof(int));
  *p_a = 1;

  char *p_b = malloc(sizeof(char));
  *p_b = 'b';

  float *p_c = malloc(sizeof(float));
  *p_c = 3.565;

  double *p_d = malloc(sizeof(double));
  *p_d = 7.77;

  printf("Before 'free()':\n");
  printf("A: %p\t%d\n", p_a, *p_a);
  printf("B: %p\t%c\n", p_b, *p_b);
  printf("C: %p\t%g\n", p_c, *p_c);
  printf("D: %p\t%g\n", p_d, *p_d);

  free(p_a);
  free(p_b);
  free(p_c);
  free(p_d);

  printf("\nAfter 'free()':\n");
  printf("A: %p\t%d\n", p_a, *p_a);
  printf("B: %p\t%c\n", p_b, *p_b);
  printf("C: %p\t%g\n", …
Run Code Online (Sandbox Code Playgroud)

c free double pointers memory-management

2
推荐指数
1
解决办法
229
查看次数

标签 统计

c ×2

c++ ×1

c++11 ×1

double ×1

free ×1

infinite-loop ×1

memory-management ×1

pointers ×1

swap ×1