GCC 3.3.4中char数组声明出错

时间:2011-05-07 13:40:04

标签: c++ c gcc gcc-warning

int main () {

   char b[100];
   for (int i = 1; i <= 10; i++ )
       scanf ("%c%*c", b[i]);
}

但是我收到错误'格式arguemnt不是指针'

如何声明一个数组以从用户那里获取所有值?

编辑:

#include <cstdio>
#include <stdlib.h>

using namespace std;


int p[100], b, bc;
char bb[100];

int main () {


        printf("Enter Count : ");
        scanf ("%d", &bc);
        for (b = 1; b <= bc; b++ ) {
            printf("Enter a char and integer: ");
            scanf ("%c%*c %d", &bb[b-1], &p[b-1]);
            printf ("\n Your Entries =>  %c,  %d", bb[b-1], p[b-1]);
        }


    return 0;
}

这是我的源代码。

3 个答案:

答案 0 :(得分:3)

怎么样:

scanf("%c", &b[i]);

scanf()需要知道变量的地址,以便它可以修改它。

答案 1 :(得分:2)

#include <cstdio>

显然,你是用C ++编写的

#include <stdlib.h>

哦!等待。毕竟是C语言 @coderex :下定决心使用的是哪种语言

using namespace std;

哦!这是C ++。 我的回答并未考虑我不知道的C ++细节。

int p[100], b, bc;
char bb[100];

如果可以避免使用全局变量,那么代码将更容易处理。

int main () {


        printf("Enter Count : ");
        scanf ("%d", &bc);
        for (b = 1; b <= bc; b++ ) {

惯用法是for (b = 0; b < bc; b++)。使用惯用方法,您不需要在循环内减去1来访问数组索引。

            printf("Enter a char and integer: ");
            // scanf ("%c%*c %d", &bb[b-1], &p[b-1]);
众所周知,

scanf()很难正确使用 无论如何,"%d"转换说明符已经丢弃了空格,因此你可以删除奇怪的东西;还有一个来自上一次scanf电话的待决状态。使用格式字符串中的空格可以摆脱它。

            scanf (" %c%d", &bb[b-1], &p[b-1]);
            printf ("\n Your Entries =>  %c,  %d", bb[b-1], p[b-1]);
        }


    return 0;
}

玩得开心!

答案 2 :(得分:0)

错误是,在输入整数值后,它将“enter key”读作换行符。

为了避免这种情况,我使用了%* c scanf ("%c%*c %d%*c", &bb[b-1], &p[b-1]);

谢谢大家。