我想保存op=R和s=5,但我的代码显示垃圾输出 #包括 #包括 void main() { int N,i,s; char op; scanf(“%d”和“&N”); int a[N]; 对于(i=0;i

我想保存op=R和s=5,但我的代码显示垃圾输出 #包括 #包括 void main() { int N,i,s; char op; scanf(“%d”和“&N”); int a[N]; 对于(i=0;i,c,C,您需要使用尾随的\n字符。最简单的方法是编写: #include <stdio.h> #include <string.h> void main() { int N,i,s; char op; scanf("%d",&N); int a[N]; for(i=0;i<N;i++) { scanf("%d",&a[i]); } scanf("%c %d",&op,

您需要使用尾随的
\n
字符。最简单的方法是编写:

#include <stdio.h>
#include <string.h>

void main()
{
    int N,i,s;
    char op;
    scanf("%d",&N);
    int a[N];
    for(i=0;i<N;i++)
    {
        scanf("%d",&a[i]);
    }

    scanf("%c %d",&op,&s);
    printf("%c %d",op,s);
}

您的确切输入和预期输出是什么?取决于您使用的是什么版本的C。C99支持它。许多编译器也支持它作为C89中的扩展。但它仍然可以在@Igor上工作?它在我的编译器上工作得非常好!:-DOf当然,使用用户控制(读:攻击者控制)创建VLA仍然是一个非常糟糕的主意大小。请问您指的是哪种标准C。(如果这句话有点讽刺的话,我很抱歉-这不是故意的。)
%C
格式说明符是
scanf()
正常跳过前导空格的罕见例外之一(
%[
是另一个)。
scanf(" %c %d",&op,&s);  //notice the space before %c