我正在学习C++并试图理解为什么EOF字符(Windows上的Ctrl + Z)如果放在一行的末尾就不会破坏while循环.
我的代码:
int main() {
char ch;
while(cin >> ch) {
cout << ch;
}
}
Run Code Online (Sandbox Code Playgroud)
当我输入^ Z时,循环中断.但是当我输入12 ^ Z时,它没有.为什么?
是否可以创建具有自定义名称的工作簿而不将其保存到磁盘?我想避免使用默认的"Workbook x"名称,但我不想要求用户保存工作簿.如果我将其自动保存在一些临时状态,用户将无法获得"另存为..."对话框,如果他点击"保存",这可能会令人困惑.
使用Matcher的 find()方法时,部分匹配返回false,但匹配器的位置仍会移动.后续调用find()省略了那些部分匹配的字符.
部分匹配的示例:"[0-9]+:[0-9]"针对输入的模式"a3;9".此模式与输入的任何部分都不匹配,因此find()返回false,但子模式"[0-9]+"匹配"3".如果我们此时更改模式并find()再次调用,则不会测试新匹配项左侧的字符,包括部分匹配项.
请注意,模式"[0-9]:[0-9]"(没有量词)不会产生这种效果.
这是正常的行为吗?
示例:在第一个for循环中,第三个模式[0-9]与字符匹配"9","3"不会报告为匹配.在第二个循环中,模式[0-9]与字符匹配"3".
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
final String INPUT = "a3;9";
String[] patterns = {"a", "[0-9]+:[0-9]", "[0-9]"};
Matcher matcher = Pattern.compile(".*").matcher(INPUT);
System.out.printf("Input: %s%n", INPUT);
matcher.reset();
for (String s: patterns)
testPattern(matcher, s);
System.out.println("=======================================");
patterns = new String[] {"a", "[0-9]:[0-9]", "[0-9]"};
matcher.reset(); …Run Code Online (Sandbox Code Playgroud) 我有一个带有Module和Userform的VBA项目.我想在我的Userform中使用模块中的一些变量.
我是否有必要在全球范围内声明这些变量?我不喜欢全局变量,因为它们留在代码的执行完毕后的记忆,我有我的宏开始到这些变量一个接一个复位.我不能使用关键字End来清除内存中的变量,因为我需要记住这些变量中的一个或两个.人们通常如何做?
编辑:有没有办法将变量从Userform传递给模块而不创建全局变量?
将过滤范围的值复制到数组似乎没有问题:然后该数组包含来自过滤和未过滤单元格的值。但是,当我将数组的内容复制回过滤范围时,结果对我来说是不可理解的。
这是我的代码:
Sub test()
Dim rangecopy() As Variant
rangecopy() = Range(Cells(2, 1), Cells(14, 3)).Value
For c = LBound(rangecopy, 1) To UBound(rangecopy, 1)
rangecopy(c, 1) = c
rangecopy(c, 2) = c * 10
rangecopy(c, 3) = c * 100
Next
Range(Cells(2, 1), Cells(14, 3)).Value = rangecopy()
End Sub
Run Code Online (Sandbox Code Playgroud)
它应该给出以下结果。在这里,当宏将数组复制到其中时,该范围未被过滤。

如果按 D 列过滤范围(“NO”被过滤掉),结果如下所示:

首先,过滤后的单元格不会更新。然后,B 列中的大多数单元格从数组的第一列获取值 (4、5、6),而其他一些单元格则从数组的第二列正确获取值 (10)。最后两行充满#N/A 错误。这应该是这样的吗?我正在使用 Office 2010。
我创建了一个UserForm,用户需要填写三个字段.宏尝试在UserForm_Initialize()事件中自动检测这些字段的值,然后在三个字段中显示找到的值,但用户可以更改它们.但是,自动检测需要几秒钟,并且会延迟UserForm的外观.我希望UserForm在自动检测程序之前显示其字段为空白,然后让自动检测程序自动填充字段.最好的方法是什么?使UserForm非模态使宏运行而不等待用户的输入,这是有问题的.我不想要"自动检测"按钮:这必须自动完成.
我正在尝试编写一个对对象集合进行排序的函数.由于对象都是相同的类型(相同的用户定义的类),因此它们的属性集是相同的.是否有可能发现对象的属性(通过代码),以便将集合放在一个二维数组中,每一行都是一个对象,每一列都是一个属性?
另一种解决方案是将每个对象从集合中复制到对象数组,并按其属性之一对其进行排序,其属性作为字符串传递给函数.但我不知道如何使用作为字符串传递的属性名称指向对象的属性.
是否存在从匹配两个或多个条件的第一行返回值的公式?例如,"从第一行返回列C,其中列A = x AND列B = y".我想在不连接A列和B列的情况下这样做.
谢谢.
我试图在第9章末尾的Bjarne Stroustrup的书" Programming:Principles and Practice using C++ "中进行练习.我复制大多数代码从书只需要定义Date类的成员函数add_day(),add_month(),add_year(),和超负荷+运营商为它与工作Chrono::Date::Month枚举.
我的问题是程序编译,但在我使用Chrono::Date::add_month()函数时崩溃main().add_month()是唯一一个+在Month枚举上使用重载运算符的函数.另外两个成员函数(add_day()和add_year())在使用时工作正常main().当我正在add_month()完成直接操作main()(不使用该函数)时,它工作正常.
崩溃发生在Chrono.cpp的第100行,错误为"Stack Overflow":
Date::Month& operator + (Date::Month& m, int n) {
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Chrono.h:
#include "../../std_lib_facilities.h"
namespace Chrono {
class Date {
public:
enum Month {
jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, …Run Code Online (Sandbox Code Playgroud) 按照此处给出的示例,我使用 VALUE 运算符来声明并填充字符串值表:
DATA tab TYPE TABLE OF STRING.
tab = VALUE #( ( 'abc' ) ( 'xyz' ) )
Run Code Online (Sandbox Code Playgroud)
SAP 给出以下错误消息:
“'abc'”和“TAB”的行类型不兼容。
然而,这有效:
DATA tab TYPE TABLE OF STRING.
tab = VALUE #( ( conv string('abc') ) ( conv string('xyz') ) )
Run Code Online (Sandbox Code Playgroud)
这是2021版本的系统。
是什么导致了这个错误?文字不应该直接被识别为字符串吗?