小编Jay*_*ind的帖子

fscanf for stdin没有提示输入

以下是我的代码中的代码段.我学会了更好地使用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)

c struct pointers scanf fgets

3
推荐指数
1
解决办法
7017
查看次数

`##'在C中意味着什么?

这是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)

c linux kernel

2
推荐指数
2
解决办法
351
查看次数

在 verilog 任务中生成语句

我想在任务中使用 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声明放在begingenerate在上面的代码中将语句。它仍然产生编译器错误

提前致谢,

杰·奥拉宾德

verilog hdl

1
推荐指数
1
解决办法
8269
查看次数

标签 统计

c ×2

fgets ×1

hdl ×1

kernel ×1

linux ×1

pointers ×1

scanf ×1

struct ×1

verilog ×1