C++学习(7)——一些常见的C ++问题

0.8 - 一些常见的C ++问题

亚历克斯于2007年12月16日| 最后由ALEX于2019年1月10日修改

在本节中,我们将解决新程序员似乎以相当高的概率运行的一些常见问题。这并不是一个完整的编译或执行问题列表,而是一个非常基本问题的实用解决方案列表。如果您对可能添加到此列表中的其他问题有任何建议,请将其发布在下面的评论部分中。

 

一般运行时问题

问:执行程序时,控制台窗口会闪烁,然后立即关闭。

 

首先,添加或确保以下行靠近程序顶部(Visual Studio用户,确保它们出现在#include“pch.h”或#include“stdafx.h”之后,如果存在的话):

 

1

2

#include <iostream>

#include <limits>

 

其次,在main()函数的末尾添加以下代码(在return语句之前):

 

1

2

3

std::cin.clear(); // reset any error flags

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore any characters in the input buffer until we find an enter character

std::cin.get(); // get one more char from the user

 

这将导致程序在继续之前等待用户按下某个键,这样您就可以在操作系统关闭控制台窗口之前检查程序的输出。

其他解决方案,例如通常建议的系统(“暂停”)解决方案可能仅适用于某些操作系统,应该避免。

Start With Debugging(F5)模式下运行程序时,较旧版本的Visual Studio可能不会暂停。尝试在Start Without Debugging(ctrl-F5)模式下运行。

问:我运行程序并获得一个窗口但没有输出。

 

您的病毒扫描程序或反恶意软件可能会阻止执行。尝试暂时禁用它,看看是否存在问题。

问:我的程序编译但无法正常工作。我该怎么办?

 

调试它!有关如何在第1章或第2章中诊断和调试程序的提示。

一般编译时问题

问:当我编译程序时,我收到有关未解析的外部符号_main或_WinMain @ 16的错误

 

这意味着您的编译器找不到您的main()函数。所有程序都必须包含main()函数。

有几点需要检查:
a)您的代码是否包含名为main的函数?
b)主要拼写是否正确?
c)编译程序时,是否看到包含函数main()的文件被编译?如果没有,请将main()函数移动到一个,或将文件添加到项目中(有关如何执行此操作的详细信息,请参阅第2.8- 包含多个代码文件的程序)。
d)您是否创建了一个控制台项目?尝试创建一个新的控制台项目。

问:我正在尝试使用C ++ 11/14/17 / XX功能,但它不起作用

 

如果您的编译器是旧的,它可能不支持这些最新添加的语言。在这种情况下,升级您的编译器。

或者,您可以尝试查看您的编译器是否支持这些,但默认情况下它已关闭。对于GCC / G ++,您可以尝试传递编译器标志-std = c ++ 11,-std = c ++ 14或-std = c ++ 17。对于Code :: Blocks,请确保设置了适当的全局编译器设置。我们将在第0.6- 安装集成开发环境(IDE)中展示如何执行此操作。

问:尝试使用cin,cout或endl时,编译器称cin,cout或endl是“未声明的标识符”

 

首先,请确保在文件顶部附近包含以下行:

1

#include <iostream>

 

其次,确保每次使用cin,cout和endl都以“std ::”作为前缀。例如:

 

1

std::cout << "Hello world!" << std::endl;

 

如果这不能解决您的问题,那么可能是您的编译器已过期,或者安装已损坏。尝试重新安装和/或升级到最新版本的编译器。

问:当尝试使用endl结束打印行时,编译器说end1是'未声明的标识符'

 

确保你没有将endl中的字母l(小写字母L)误认为是数字1. endl是所有字母。确保您的编辑器使用的字体清楚地表明字母小写字母L,大写字母i和数字1之间的差异。字母大写字母o和数字零字母很容易混淆在许多非编程字体中。

Visual Studio问题

问:使用Microsoft Visual C ++进行编译时,会收到C1010致命错误,并显示错误消息,如“c:\ vcprojects \ test.cpp(263):致命错误C1010:查找预编译头指令时意外结束文件”

 

当Microsoft Visual C ++编译器设置为使用预编译的头文件但是一个(或多个)C ++代码文件不#include“stdafx.h”或#include“pch.h”作为代码的第一行时,会发生此错误文件。

我们建议的解决方法是关闭预编译的头文件,我们将在第0.7- 编译您的第一个程序时向我们展示如何操作。

如果你想保持预编译的头文件被打开,为了解决这个问题,只需找到产生错误的文件(在上面的错误中,test.cpp是罪魁祸首),并在最顶层添加以下行:文件):

 

1

#include "pch.h"

 

较旧版本的Visual Studio使用“stdafx.h”而不是“pch.h”,因此如果pch.h无法解决问题,请尝试使用stdafx.h。

请注意,对于具有多个文件的程序,每个C ++代码文件都需要从此行开始。

或者,您可以关闭预编译的标头。

问:Visual Studio出现以下错误:“1MSVCRTD.lib(exe_winmain.obj):错误LNK2019:未解析的外部符号_WinMain @ 16在函数”int __cdecl invoke_main(void)“中引用(?invoke_main @@ YAHXZ)”

 

您可能已经创建了Windows图形应用程序而不是控制台应用程序。重新创建项目,并确保将其创建为Windows(或Win32)控制台项目。

问:当我编译程序时,我收到有关“无法找到或打开PDB文件”的警告

 

这是一个警告,而不是错误,所以它不应该影响您的程序。但是,这很烦人。要解决此问题,请进入“调试”菜单 - >“选项和设置” - >“符号”,然后选中“Microsoft Symbol Server”。

还有别的

问:我还有其他一些我无法弄清楚的问题。我怎样才能快速得到答案?

 

随着您对材料的进展,您无疑会遇到问题或遇到意想不到的问题。下一步做什么取决于你的问题。但总的来说,你可以尝试一些事情。

首先,问问谷歌。找到一个很好的方式来表达您的问题并进行Google搜索。如果您收到错误消息,请使用引号将确切的消息粘贴到Google中。
可能有人已经问了同样的问题并且有一个答案在等着你。

如果失败,请询问问答板。有一些网站专为编写问题和答案而设计,例如Stack Overflow。尝试在那里发布您的问题。请记住要彻底了解您的问题,并包括所有相关信息,例如您所使用的操作系统以及您正在使用的IDE。

转载自:https://www.learncpp.com/cpp-tutorial/a-few-common-cpp-problems/

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件内包含 Apache C++ 、Standard Library、ASL、Boost、BDE、Cinder、Cxxomfort:轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。 Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。 EASTL :EA-STL公共部分。 ffead-cpp :企业应用程序开发框架。 Folly:由Facebook开发和使用的开源C++库。 JUCE :包罗万象的C++类库,用于开发跨平台软件。 libPhenom:用于构建高性能和高度可扩展性系统的事件框架。 LibSourcey :用于实时的视频流和高性能网络应用程序的C++11 evented IO。 LibU : C语言写的多平台工具库。 Loki :C++库的设计,包括常见的设计模式和习语的实现。 MiLi :只含头文件的小型C++库。 openFrameworks :开发C++工具包,用于创意性编码。 Qt :跨平台的应用程序和用户界面框架。 Reason :跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。 ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。 STLport:是STL具有代表性的版本。 STXXL:用于额外的大型数据集的标准模板库。 Ultimate++C++跨平台快速应用程序开发框架。 Windows Template Library:用于开发Windows应用程序和UI组件的C++库。 Yomm11 :C++11的开放multi-methods。
### 回答1: 判断一个数是否是素数是一种常见问题,可以使用C/C++编程语言来解决。以下是一个简单的程序示例来判断一个数是否为素数。 ```c #include <stdio.h> int isPrime(int n) { if(n <= 1) { return 0; } for(int i = 2; i * i <= n; i++) { if(n % i == 0) { return 0; } } return 1; } int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); if(isPrime(num)) { printf("%d 是素数\n", num); } else { printf("%d 不是素数\n", num); } return 0; } ``` 上述代码中,定义了一个函数`isPrime`来判断给定的数`n`是否为素数。函数首先判断了特殊情况,若`n`小于等于1,则不是素数,直接返回0;否则,使用一个循环从2开始到`n`的平方根(包括)进行迭代,判断`n`是否可以被迭代变量`i`整除,若能整除,则不是素数,返回0;若循环结束后仍然没有找到能整除`n`的数,则说明`n`是素数,返回1。 在`main`函数中,用户输入一个整数`num`,然后调用`isPrime`函数判断该数是否为素数,并输出相应的结果。 这是一个简单的判断素数的C/C++程序示例,可以帮助零基础学习者理解如何使用C/C++来解决这类问题。 ### 回答2: 要判断一个数是否是素数,可以采用遍历除法的方式。 首先,素数定义为大于1的正整数,因此如果输入的数小于或等于1,则它不是素数。 其次,对于大于1的正整数n,我们可以从2开始遍历到n的平方根,如果在这个区间内找到了n的因子,则n不是素数,否则n是素数。 具体方法如下: 1. 输入一个大于1的正整数n。 2. 判断n是否小于或等于1,如果是则输出"不是素数",结束程序;否则继续执行。 3. 从2开始遍历到n的平方根,依次将遍历的数赋值给变量i。 4. 判断n是否能被i整除,如果能被整除,则输出"不是素数",结束程序;否则继续执行。 5. 重复步骤4,直到i大于n的平方根。 6. 如果步骤4和步骤5都没有找到n的因子,则输出"是素数",结束程序。 例如,如果输入的数为63,按照上述步骤执行: 1. 输入63。 2. 63大于1,继续执行。 3. 从2开始遍历到√63≈7.93,依次将2、3、4、5、6赋值给变量i。 4. 63不能被2整除,继续执行。 5. 63不能被3整除,继续执行。 6. 63能被7整除,输出"不是素数",结束程序。 因此,63不是素数。 ### 回答3: 要判断一个数是否是素数,可以通过以下方法实现: 1. 首先,定义一个函数isPrime(num),用来判断num是否是素数。接受一个整数参数num,返回一个布尔值true或false。 2. 在isPrime函数中,首先判断num是否小于2,若是,则返回false,因为小于2的数都不是素数。 3. 接着,使用一个循环从2开始一直到num-1,判断num能否被某个数整除。若num能被任何一个小于它的数整除,则返回false。 4. 如果循环结束后仍然没有找到能整除num的数,那么num就是素数,返回true。 5. 在主函数中调用isPrime函数,输入要判断的数,即可得到判断结果。 以下是一个示例代码: ```c #include <stdio.h> #include <stdbool.h> bool isPrime(int num) { int i; if (num < 2) { return false; } for (i = 2; i < num; i++) { if (num % i == 0) { return false; } } return true; } int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); if (isPrime(num)) { printf("%d是素数。\n", num); } else { printf("%d不是素数。\n", num); } return 0; } ``` 在主函数中,首先通过`scanf`函数获取要判断的整数,然后调用isPrime函数进行判断,根据返回结果输出相应的信息。以上代码可以用于判断一个数是否是素数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值