**今日练习过程中遇到了很多新的很有价值的问题,特记录于此,便于回望复习,以示沉淀.**
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 韩某人记