我想读几个数字stdin,每行一个数字.我想忽略任何行上的数字和字符串之后的任何尾随文本.为了实现这一点,我使用了以下代码:
while (getline(cin, str)) {
num = strtol(str.c_str(), NULL, 0);
if (errno != ERANGE && errno != EINVAL) {
arr[i++] = num;
req_pages_size++;
cout << arr[i-1] << "\t";
}
str.clear();
}
Run Code Online (Sandbox Code Playgroud)
ISSUE:转换失败后,errno无法更新成功转换案例的错误值.对于之前未成功的通话,它的价值保持不变.
请让我知道如何处理这个问题?
我想打印除某些变量之外的所有环境变量。
因此我在stackoverflow上找到了一个解决方案:Bash: Loop through Variables contains pattern in name
while IFS='=' read -r name value; do
if [ ! "$name" = "SOMEVAR" -a ! "$name" = "SOMEOTHERVAR" ]; then
echo "$name=$value"
fi
done < <(env)
Run Code Online (Sandbox Code Playgroud)
但是,如果我的环境变量包含换行符,则这不起作用,例如:
export SOMEVAR="some
text with
newlines"
Run Code Online (Sandbox Code Playgroud)
使用上述解决方案,它将打印:
text with=
newlines=
PWD=/home/...
...
Run Code Online (Sandbox Code Playgroud)
我还尝试使用以空结尾的字符串和多行匹配sed:
env -0 | sed -e '{N; s@SOMEVAR.*\x0@@ ; D}' | tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)
但这会切断输出,并且总是首先打印具有多行内容的变量的最后一行:
newlines
PWD=/home/...
...
Run Code Online (Sandbox Code Playgroud)
有没有办法在打印时跳过多行环境变量?
是否有人知道这两段代码的计算成本是多少?
while (n > 2)
n = sqrt(n);
while (n > 2)
n = log(n);
Run Code Online (Sandbox Code Playgroud) 我正在为Linux上的控制台程序编写命令行界面.我希望能够使用像箭头一样的键.所以为了捕获代码,我使用这个简单的程序:
int main()
{
int c = 0;
while (c != 3) { // ctrl-c
c = getchar();
printf("%d\n", c);
}
}
Run Code Online (Sandbox Code Playgroud)
这样做我在捕获HOME键时遇到了问题.在一台计算机上我得到了序列"27 91 72",在另一台计算机上我得到了"27 79 72",在第三台我得到了"27 91 49 126".
我不知道为什么我在HOME和END键上得到如此不同的代码(箭头和F1-F12键在三台计算机上给出了相同的序列).
有没有一种标准的方法来获取这些键,或者某种配置可以在所有机器上提供相同的序列?