如果检测到一些特殊情况,我正在使用switch语句提前从我的main函数返回.特殊情况使用枚举类型进行编码,如下所示.
typedef enum {
NEG_INF,
ZERO,
POS_INF,
NOT_SPECIAL
} extrema;
int main(){
// ...
extrema check = POS_INF;
switch(check){
NEG_INF: printf("neg inf"); return 1;
ZERO: printf("zero"); return 2;
POS_INF: printf("pos inf"); return 3;
default: printf("not special"); break;
}
// ...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我运行它时,字符串not special被打印到控制台,主要功能的其余部分继续执行.
如何让switch语句在这里正常运行?谢谢!
我有一个制表符分隔的文本文件,我发送column到"漂亮的打印"表.
原始档案:
1<TAB>blablablabla<TAB>aaaa bbb ccc
2<TAB>blabla<TAB>xxxxxx
34<TAB>okokokok<TAB>zzz yyy
Run Code Online (Sandbox Code Playgroud)
使用column -s$'\t' -t <original file>,我明白了
1 blablablabla aaaa bbb xxx
2 blabla xxxxxx
34 okokokok zzz yyy
Run Code Online (Sandbox Code Playgroud)
如预期的.现在我想为列添加颜色.我试图在原始文件中的每个制表符分隔字段周围添加转义码.column成功打印颜色,但列不再对齐.相反,它只是逐字打印TAB分隔符.
问题是:如何使列对齐,还有独特的颜色?
我想过两种方法来实现这个目标:
column参数以使对齐与颜色代码一起使用问题是,我不确定如何做到这两个...
作为参考,这是我要传递的内容column:

请注意,这些字段确实由TAB字符分隔.我已经证实了这一点od.
编辑:
着色似乎没有问题.我已经有上面显示的文件,颜色代码正常工作.column一旦我使用转义码发送输入,问题就不会对齐.我正在考虑将没有颜色代码的字段传递给column,然后复制column每个字段之间输出的确切空格数,并在漂亮的打印方案中使用它.
我需要为进程使用的文件(执行我的C++程序)提供一个唯一的名称.在我使用静态字符串之前,但当我尝试并行运行程序的两个实例时,我意识到它们都访问了同一个文件.
为此,我希望文件名包含创建和使用它的进程的PID.
但是,当我尝试使用时getpid(),我似乎总是得到-1返回值.
void accessfile(){
std::cout << "DEBUG: accessfile() called by process " << getpid() << " (parent: " << getppid() << ")" << std::endl;
// Code here to create and/or access the file
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到:
DEBUG: accessfile() called by process -1 (parent: 17565)
Run Code Online (Sandbox Code Playgroud)
我检查过ps ux,这个过程17565实际上是我的登录shell.如何获取我正在执行的程序的PID?
我确实注意到手册条目中的这些信息getpid():
Since glibc version 2.3.4, the glibc wrapper function for getpid()
caches PIDs, so as to avoid additional system calls when a process
calls …Run Code Online (Sandbox Code Playgroud) 我有一个C++程序,它调用由Flex/Bison生成的一些C例程.
当我以Windows 8.1 64位平台为目标时,我在运行时遇到以下异常:
Unhandled exception at 0x0007FFFA70F2C39 (libapp.dll) in application.exe: 0xC0000005:
Access violation writing location 0x000000005A818118.
Run Code Online (Sandbox Code Playgroud)
我将此异常跟踪到以下代码:
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
{
YY_BUFFER_STATE b;
b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_buf_size = size; // This access is what throws the exception
}
Run Code Online (Sandbox Code Playgroud)
作为参考,代码中的其他地方(也由Flex/Bison生成),我们有:
typedef struct yy_buffer_state *YY_BUFFER_STATE;
struct yy_buffer_state
{
FILE *yy_input_file;
char *yy_ch_buf;
char *yy_buf_pos;
yy_size_t yy_buf_size;
// ... …Run Code Online (Sandbox Code Playgroud) 我正在尝试为可变长度的字符串分配内存n.这是我的尝试:
int n = 4; // Realistically, this number varies.
char* buffer = new char[n * 512]();
printf("buffer[0:3] = [%d][%d][%d][%d]\n", buffer[0], buffer[1], buffer[2], buffer[3]);
Run Code Online (Sandbox Code Playgroud)
我的理解是,最后的包含()应该将所有元素初始化为零.但是,我注意到了.这是控制台的输出:
buffer[0:3] = [-120][-85][-45][0]
Run Code Online (Sandbox Code Playgroud)
如何使new初始化程序正常工作?
注意:我知道我可以使用std::fill,但我很好奇为什么new初始化程序不能像宣传的那样工作.
编辑:这是我修改后的方法std::fill,它给出了正确的行为.但我仍然想知道为什么这是必要的.
int n = 4; // Realistically, this number varies.
char* buffer = new char[n * 512]();
std::fill(&buffer[0], &buffer[n * 512], 0)
printf("buffer[0:3] = [%d][%d][%d][%d]\n", buffer[0], buffer[1], buffer[2], buffer[3]);
Run Code Online (Sandbox Code Playgroud)
这输出:
[0][0][0][0]
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些代码从 bash 5.1 移植到 4.2.46。一个尝试从特定格式的字符串中去除颜色代码的函数停止工作。
text这是这种格式的示例字符串。我为此打开了扩展通配符。
text="$(printf -- "%b%s%b" "\[\e[31m\]" "hello" "\[\e[0m\]")"
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
在 bash 5.1 中,此参数扩展可删除所有颜色代码和转义字符
bash-5.1$ echo "${text//$'\[\e'\[/}"
31m\]hello0m\]
bash-5.1$ echo "${text//$'\[\e'\[+([0-9])/}"
m\]hellom\]
bash-5.1$ echo "${text//$'\[\e'\[+([0-9])m$'\]'/}"
hello
Run Code Online (Sandbox Code Playgroud)
在 bash 4.2.46 中,当我构建参数扩展时,我开始出现不同的行为。
bash-4.2.46$ echo "${text//$'\[\e'\[/}"
\31m\]hello\0m\]
bash-4.2.46$ echo "${text//$'\[\e'\[+([0-9])/}"
\[\]hello\[\] ## no longer matches because `+([0-9])` doesn't follow `\[`
Run Code Online (Sandbox Code Playgroud)
差异来自于这一行:echo "${text//$'\[\e'\[/}"
bash-5.1: 31m\]hello0m\]
bash-4.2.46: \31m\]hello\0m\]
Run Code Online (Sandbox Code Playgroud)
显示内容如下printf "%q" "${text//$'\[\e'\[/}":
bash-5.1: 31m\\\]hello0m\\\]
bash-4.2.46: \\31m\\\]hello\\0m\\\]
Run Code Online (Sandbox Code Playgroud)
4.2.26 中的额外内容从哪里来\?
即使当我尝试删除它时,模式也会停止匹配:
bash-5.1: 31m\]hello0m\]
bash-4.2.46: \31m\]hello\0m\]
Run Code Online (Sandbox Code Playgroud)
我猜测可能存在与参数扩展、反斜杠转义和扩展通配符相关的错误。
我的目标是编写适用于 …
运用 sort (coreutils) 5.2.1
我有以下文件,我想按字段4的非整数部分排序.这可以是负数或正数,也可能具有值INF.
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=INF field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 field3 tag=5.77 field5 field6
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=INF field5 field6
Run Code Online (Sandbox Code Playgroud)
我希望将其排序为
field1 field2 field3 tag=-1.92 field5 field6
field1 field2 field3 tag=-1.91 field5 field6
field1 field2 field3 tag=0.123 field5 field6
field1 field2 field3 tag=4.22 field5 field6
field1 field2 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的模块,根据四个输入信号的值输出一个14位数.我的尝试如下所示.
module select_size(
input a,
input b,
input c,
input d,
output [13:0] size
);
if (a) begin
assign size = 14'h2222;
end
else begin
if (b) begin
assign size = 14'h1111;
end
else begin
if (c) begin
assign size = 14'h0777;
end
else begin
assign size = 14'h0333;
end
end
end
endmodule
Run Code Online (Sandbox Code Playgroud)
编译时,我收到以下错误:
错误:HDLCompiler:44 - 第67行:c不是常数
我不明白为什么如果前面的另外两个if语句不起作用的话.我试过将条件改为
if (c == 1) begin
Run Code Online (Sandbox Code Playgroud)
但无济于事.
有谁知道如何解决这个错误?谢谢!
我有发布clear命令的习惯.
当我运行cygwin时,clear没有安装包含的包,我没有安装它的选项.Ctrl+ L是一个很好的替代品; 但是,我仍然clear习惯性地发出命令.
我想对clear关键字进行别名以发出Ctrl+ L击键.这可以在.bashrc文件中实现,还是类似的东西?
谢谢!
我的网站上有一个文本文件,只包含字符串"1.15"(我正在编写的应用程序版本).在初始化用户表单时,我想从其URL读取该文件并返回字符串"1.15",以便我可以根据应用程序的版本(存储为const字符串)进行检查.
这是我想要的格式......
Const version As String = "1.14"
Const currentVersionURL As String = "http://mywebsite.com/currentversion.txt"
Sub UserForm_Initialize()
If version <> GetCurrentVersionNumber() Then
MsgBox "Please update the application."
End If
End Sub
Function GetCurrentVersionNumber() As String
' What do I put here? :(
End Function
Run Code Online (Sandbox Code Playgroud)
我知道该Workbooks.OpenText方法,但我不想将字符串写入工作簿.我尝试过使用ADODB.LoadFromFile和WinHttp.WinHttpRequest.Open方法,但两者都无法读取文件.
任何有关填写内容的建议GetCurrentVersionNumber()都将不胜感激.:)
在我的bash脚本中,我试图解析状态文件并根据某些关键字检测错误.我将这些前缀存储在列表中,然后循环遍历它们.
Bash脚本:
status_page="/path/to/file.txt"
list="aaa bbb ccc ddd"
for pre in $list
do
echo "grep '\w\w\w${pre}-.*\.lin failed' ${status_page}" # debug
if grep '\w\w\w${pre}-.*\.lin failed' ${status_page}; then
echo "Found error!"
exit 8;
fi
done
Run Code Online (Sandbox Code Playgroud)
/path/to/file.txt:
xyzfff-tool.lin failed
xyzggg-exec.lin failed
rstccc-tool.lin failed
Run Code Online (Sandbox Code Playgroud)
bash脚本应该捕获该行rstccc-tool.lin failed,但它会跳过它.
为了调试,我逐字打印grep命令,当我复制该行并在我的shell(tcsh)中发出命令时,它返回该行...
贝壳:
$ grep '\w\w\wccc-.*\.lin failed' /path/to/file.txt
rstccc-tool.lin failed
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
如果grep可以在我正常发出命令时找到该行,那么当bash脚本调用grep时它怎么会找不到呢?
预先警告,我是一个Perl新手.
我在寻找一个很好的简写来比较两个数组,说arrA和arrB.
我想知道是否有任何元素arrB不在里面arrA.
如果重要,这些数组中的元素就是字符串.
我知道我可以通过迭代数组并使用来完成这个grep,但我想知道是否有一个很好的速记方式来做到这一点.我的Perl-fu缺乏.
谢谢!
编辑:这是我正在寻找的,以防我上面不清楚.
my @arrA = ( "aaa", "bbb", "ccc" );
my @arrB = ( "aaa", "bbb", "ccc", "ddd" );
my @BnotA = ();
# Something goes here, help!
print "Elements of arrB that are not in arrA: @BnotA\n";
Run Code Online (Sandbox Code Playgroud)
我对这里的数据结构并不挑剔; 如果我可以改变结构以使其更有效,我可以做到这一点.