以下是我的代码中的代码段.我学会了更好地使用fscanf而不是scanf.但fscanf并没有等待输入
switch (argc) {
case 2: printf("\nEnter the subject code: ");
while(fgets(temp_op->subject, BUF_NOTES, stdin)==NULL);
case 3: printf("\nEnter the topic: ");
while(fgets(temp_op->topic, BUF_TOPIC, stdin)==NULL);
case 4: printf("\nEnter the Level: ");
flag = fscanf(stdin,"%d",&temp_op->level);
case 5: printf("\nEnter the Answer Key: ");
while(fgets(temp_op->key, BUF_KEY, stdin)==NULL);
case 6: printf("\nEnter any additional notes(optional): ");
while(fgets(temp_op->notes, BUF_NOTES, stdin)==NULL);
break;
default:printf("\nExcess Arguments");
}
Run Code Online (Sandbox Code Playgroud)
问题在于case 5.fgets不是在等待输入,但是案例6表现良好.
但是,如果我注释掉case 4"flag = ..." 这一行,那么下一个fgets将提示输入.奇怪的.我想知道为什么以前的fscanf影响后者的fgets.我的结构定义是:
typedef struct {
int mode ;
int level;
char …Run Code Online (Sandbox Code Playgroud) 这是Linux内核源代码的摘录.有什么stem##用?在c中第一次看到
#define __pcpu_size_call_return(stem, variable) \
({ typeof(variable) pscr_ret__; \
__verify_pcpu_ptr(&(variable)); \
switch(sizeof(variable)) { \
case 1: pscr_ret__ = stem##1(variable);break; \
case 2: pscr_ret__ = stem##2(variable);break; \
case 4: pscr_ret__ = stem##4(variable);break; \
case 8: pscr_ret__ = stem##8(variable);break; \
default: \
__bad_size_call_parameter();break; \
} \
pscr_ret__; \
})
Run Code Online (Sandbox Code Playgroud) 我想在任务中使用 generate 语句。以下代码给出了编译错误(iverilog)。
task write_mem; //for generic use with 8, 16 and 32 bit mem writes
input [WIDTH-1:0] data;
input [WIDTH-1:0] addr;
output [WIDTH-1:0] MEM;
integer i;
begin
generate
genvar j;
for(j=0; j<i;j++)
MEM[addr+(i-j-1)] = data[(j*8):((j*8) + 8)-1];
endgenerate
end
endtask // write_mem
Run Code Online (Sandbox Code Playgroud)
我也尝试将其放在generateline 之后integer i,但仍然产生错误。有什么想法吗?
编辑:我也尝试将genvar声明放在begin和generate在上面的代码中将语句。它仍然产生编译器错误
提前致谢,
杰·奥拉宾德