当前位置: 代码迷 >> 综合 >> C++基础知识 - (scanf)(gets)(cin)常见错误
  详细解决方案

C++基础知识 - (scanf)(gets)(cin)常见错误

热度:51   发布时间:2023-10-10 17:32:07.0

不安全函数(scanf)

VS2019中不能直接使用scanf等C标准库函数
因为vs使用更安全的c11标准, 认为这类函数不安全。

  • 解决方案:
    1.方法1:使用修改项目的属性,直接使用这些“不安全”的函数。
    添加: /D _CRT_SECURE_NO_WARNINGS
    C++基础知识 - (scanf)(gets)(cin)常见错误

2.方法2:使用c11标准中的“更安全”的函数
scanf_s

#include <stdio.h>int main(void) {
    int num;char a[64];//scanf("%d", &num); //解决方法, 使用scanf_s()scanf_s("%d", &day);	//整数类型不需要在尾部添加长度scanf_s("%s", a, 64);	//字符数组需要在尾部添加数组的长度system("pause");return 0;
}

 
 
 
 

gets不能使用

使用gets_s
gets是老标准C语言函数,vs使用更安全的c11标准, 使用对应的gets_s

char  line[32];
gets_s(line, sizeof(line));

 
 
 
 

cin >> 的返回值

((cin >> word) == 0) 在VS中不能通过编译

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {
    string word;int count = 0;int length = 0;cout << "请输入任意多个单词:";while (1) {
    if ((cin >> word) == 0) {
      //在 vs中不能通过编译break;}count++;length += word.length();}cout << "一共有" << count << "单词" << endl;cout << "总长度:" << length << endl;system("pause");return 0;
}

解决方案:

  • 把 if ((cin >> word) == 0) 修改为:
  • if ((bool)(std::cin >> word) == 0)
    或者修改为:
  • if (!(cin >> word))

 
 
 
 

getline的返回值

(getline(cin, line) == 0) 在VS中不能通过编译

#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {
    string line;int lineCount = 0;int length = 0;cout << "请输入任意多行:";while (1) {
    // 遇到文件结束符时, 返回NULL(0)if (getline(cin, line) == 0) {
     // 在VS中不能通过编译break;}lineCount++;length += line.length();}cout << "一共有" << lineCount << "行" << endl;cout << "总长度: " << length << endl;system("pause");return 0;
}

解决方案:

  • 把if (getline(cin, line) == 0) {修改为:
  • if ((bool)getline(cin, line) == 0) {
    或者修改为:
  • if (!getline(cin, line)) {