今日错误总结(编译器严格程度差异的部分解决)

**今日练习过程中遇到了很多新的很有价值的问题,特记录于此,便于回望复习,以示沉淀.**

1.VS2019中C++的if判断对于输入字符串的由于严格程度导致问题的部分解决办法:

	下面介绍一下提示错误的代码(在Code Blocks没有错误):下面的代码是用来测量输入的总单词数以及字母总数的.
#include <iostream> 
#include <string> 
#include <Windows.h> 

using namespace std;

int main(void) { 
	string word; 
	int count = 0; 
	int length = 0; cout << "请输入任意多个单词:"; 
	while (1) { // 输入成功时,返回 cin 对象本身 // 遇到文件结束符(ctrl+z),而导致输入失败是,返回 0 
		if ((cin >> word) == 0) {
			break;
		}
		count++; 
		length += word.length();
	}
	cout << "一共有" << count << "单词" << endl;
	cout << "总长度:" << length << endl;
	 system("pause"); 
	 return 0; 
}

虽然在codeblocks里完全正常运行,但是在VS2019中会出现如下错误提示:
在这里插入图片描述

由于本人太菜,完全看不懂,网上也没太搞明白,后来求助老师和同学后得到如下解决办法:
将错误位置更改为:

if (!(cin >> word) )

或者

if (((bool)(cin >> word))==false )

最后都可以成功执行
在这里插入图片描述
最后都需要Ctrl+z实现结束死循环.
2.VS2019中C语言对上述功能的同等实现,同样出现了问题但是解决了一部分
先提供代码如下:

#include <stdio.h>
#include <string.h>
#include <Windows.h>

int main(void) {
	char word[200];
	int count = 0;
	int length = 0;
	printf("请输入任意多个单词:\n");
	while (1) { // 输入成功时,返回 cin 对象本身 // 遇到文件结束符(ctrl+z),而导致输入失败是,返回 0
		if (scanf("%s",word)==-1 ) {
			break;
		}
		count++;
		length += strlen(word);
	}
	printf("一共有 %d 个单词\n", count);
	printf("总长度:%d\n", length);
	 system("pause");
	 return 0;
}

这段代码同样在codeblocks里完美运行,but!!!在VS2019里也出了问题:
在这里插入图片描述
但这里很好解决,但预感以后如果不注意这个safe,以后肯定会出大事儿.
只要将源文件cpp文件的属性里把SDL检查关掉就好了.
在这里插入图片描述
但是今天最迷惑的来了,这个程序虽然能运行了,but!!!只有用三次Ctrl+z并回车三次才能结束程序,这个问题现在正在请教,预计晚上更新.
在这里插入图片描述
待续 2020.2.20 韩某人记

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值