我有一个简单的程序,我在其中int按升序或降序排列数组的元素,然后使用该swap()函数来移动元素。我编译的程序没有任何错误,它运行得非常好。后来我才注意到,我在编译之前忘记#include了swap()(<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>?我觉得不应该是吧?
无论如何,对于一个简单的答案来说,这可能是一个很长的问题,但我很好奇。我还在学习C和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) 我能找到的所有关于释放'双'指针的东西都指的是释放指针的指针,这不是我所说的.我已经想出了如何做到这一点.
它甚至可能不是一个大的事情在所有,但我注意到,当我free()一个int,char或float指针,价值被删除或垃圾值替换,但是当我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)