我有一个由某种类型索引的某种对象的数组index:
type index is new Integer range 1..50;
type table is new Array(index) of expression;
Run Code Online (Sandbox Code Playgroud)
现在,我需要访问其中一个表达式,具体取决于键盘输入的用户.为此我做了以下事情:
c: Character;
get(c);
s: String := " ";
s(1) := c;
Run Code Online (Sandbox Code Playgroud)
最后我可以将角色转换为Integer:
i: Integer;
i := Integer'Value(s);
Run Code Online (Sandbox Code Playgroud)
现在,我有用户想要访问的值的位置,但Ada不允许您访问table,因为它是由索引编制index而不是Integer,它们是不同的类型.
根据用户的输入访问表达式的最佳解决方案是什么?
为了澄清一点,我写了两个小测试程序,如下所示.
#include <stdio.h>
int main(int argc, char *argv[])
{
char *p = "ab";
p++;
p++;
if (*p)
printf("p is not NULL \n");
else
printf("ps is NULL \n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序初始化p字符串文字的char指针ab.我将指针递增两次,然后if循环检查是否p指向非NULL字符.这样可以正常工作并提供以下输出.
ps is NULL
Run Code Online (Sandbox Code Playgroud)
#include <stdio.h>
int main(int argc, char *argv[])
{
char *p = '\0';
if (*p)
printf("p is not NULL \n");
else
printf("ps is NULL \n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的程序将char指针初始化p为NULL字符\0.如果我编译并运行程序,我会得到分段错误.有人解释一下吗?
两种情况的唯一区别是NULL字符位于位置0和位置.2否则程序看起来与我相同.
我在想,根据它的名字,逻辑上,这个函数将返回第一个字符的索引,而不是空格,也就是说,不是空格或制表.
不过,测试时它的一些字符串,并在它的实现寻找(文件时,A-strsea.adb的GNAT 4.7.4),我意识到,实际上这个函数返回的第一个字符的索引不是一个普通的空间(ASCII 32).在我看来,这与它的名字可以设想的不一致.
那么,我在哪里可以找到此函数的预期行为(除了查看代码)?实际上,在AARMfor中Ada 2012,我只找到了原型,没有任何语义信息.
我正在尝试在服务器上设置git并遵循此操作.我收到这个命令的错误
mkdir .ssh && chmod 700 .ssh`
Run Code Online (Sandbox Code Playgroud)
错误说:
bash: syntax error near unexpected token `;&'
Run Code Online (Sandbox Code Playgroud)
任何的想法?
我正在学习Ada,我在理解并发模型方面遇到了一些问题.以下测试应用程序应创建3个并行运行的任务,并简单地打印一系列数字.如果我没有使用任务,entry那么一切都很好,但如果我使用条目,则程序调用块并且根本不会发生并发.
我知道有可能实现互斥和同步执行,但我无法理解如何分离任务,甚至可能创建其中的几个.
q_multithreading.ads:
package Q_MULTITHREADING is
task type TASK_LOOP is
end TASK_LOOP;
type TASK_LOOP_ACCESS is access TASK_LOOP;
--===========================================================================
task type TASK_ENTRY_LOOP is
entry P_ITERATE(to : in Integer);
end TASK_ENTRY_LOOP;
type TASK_ENTRY_LOOP_ACCESS is access TASK_ENTRY_LOOP;
--===========================================================================
procedure P_EXECUTE_NO_ENTRY;
procedure P_EXECUTE_ENTRY(to : in Integer);
end Q_MULTITHREADING;
Run Code Online (Sandbox Code Playgroud)
q_multithreading.adb:
with Ada.Text_IO;
package body Q_MULTITHREADING is
V_ID_COUNTER : Integer := 1;
--===========================================================================
task body TASK_LOOP is
V_ID : Integer := -1;
begin
V_ID := V_ID_COUNTER;
V_ID_COUNTER := V_ID_COUNTER + 1;
for i in …Run Code Online (Sandbox Code Playgroud) 今天,我发现我的shell脚本偶尔会提前退出.检查代码后,我发现这是因为set -e我的shell脚本中有一个,我使用内置函数RANDOM生成一个随机数.
使用set -e,如果脚本中的任何命令返回非零,脚本将立即退出.所以我写了一段测试代码,如下所示:
set -u
#set -e
for (( i=0; i < 100; i++ ))
do
index=$(expr ${RANDOM} % 16)
echo "RANDOM return $? , index is $index"
done
Run Code Online (Sandbox Code Playgroud)
注意评论set -e,我这样做是为了显示100输出线,其中一些RANDOM return 1确实存在.例如,我得到这样的结果:
RANDOM return 0 , index is 2
RANDOM return 0 , index is 10
RANDOM return 1 , index is 0
RANDOM return 0 , index is 9
RANDOM return 0 , index is 5
RANDOM …Run Code Online (Sandbox Code Playgroud) 我知道,因为argc是参数的数量,它可以是一个int.但为什么应该argv是char pointer类型?这是否意味着我无法传递整数参数并argv[1]在数学运算中使用?
编辑:为了使它更清晰,是否可以写出像int* argv[].是否argv已定义为char*无法更改的类型?
for ( declaration expressionopt ; expressionopt ) statement
Run Code Online (Sandbox Code Playgroud)
for循环的第二种语法只有一个分号,但每当我尝试使用它时,它会产生一个错误,说:
error: expected `;` before `)` token
Run Code Online (Sandbox Code Playgroud) 偶尔,我一直在问一个有趣的问题:x++和++x不能留在C值?很多人告诉我这++x不可能因为++ x的汇编代码没有返回寄存器.我对此表示怀疑.所以我做了一些实验.
c代码:
#include <stdio.h>
int main()
{
int a = 1;
a++ = 10;
++a = 10;
return a;
}
Run Code Online (Sandbox Code Playgroud)
gcc编译错误:
./test.c:6: invalid lvalue in assignment
./test.c:7: invalid lvalue in assignment
Run Code Online (Sandbox Code Playgroud)
更改代码和程序集:
int a = 1;
int b = a++;
int c = ++a;
Run Code Online (Sandbox Code Playgroud)
汇编代码:
0x08048400 <main+0>: push %ebp
0x08048401 <main+1>: mov %esp,%ebp
0x08048403 <main+3>: sub $0x18,%esp
0x08048406 <main+6>: movl $0x1,-0x4(%ebp)
0x0804840d <main+13>: mov -0x4(%ebp),%eax
0x08048410 <main+16>: mov %eax,-0x8(%ebp)
0x08048413 <main+19>: incl -0x4(%ebp) …Run Code Online (Sandbox Code Playgroud) I tired to git pull, it suddenly comes out ..
Please let me know what I have to do
git pull
remote: Counting objects: 196, done.
remote: warning: suboptimal pack - out of memory
remote: fatal: Out of memory, malloc failed (tried to allocate 220610561 bytes)
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF …Run Code Online (Sandbox Code Playgroud)