-1
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void clearscreen()
{
    system("cls");
}

int main()
{
    int b1,b,c;
    char data[20]; 
    int number,a;

    printf("How many data do you want to store  ");
    scanf("%d",&number);

    for(a=1;a<=number;a++)
    {
        printf("Input your data No_%d:       ",a);
        scanf("%s",&data[a]);
    }     
    return 0;
}

我的问题是这样的:存储数据后,你如何看待它?例如我存储2个数据。nxt 是我想查看这两个数据。有人可以给我一个示例代码。

4

3 回答 3

1

您当前的代码可以编译,但它从根本上是错误的:char是一种可以存储单个字符而不是整个字符串的类型。因此,&data[a]将指向先前使用的字符串的子字符串,随后的每一个都覆盖先前输入的部分。

不幸的是,C 中的字符串操作远比这复杂得多——您需要一个 2D 数组或一个指针数组才能正确完成任务:

char *data[20];
...
for(a=1;a<=number;a++)
{
    char buf[101];
    printf("Input your data No_%d:       ",a);
    scanf("%100s", buf); // 100-char limit, no ampersand!
    data[a] = malloc(sizeof(char)*(strlen(buf)+1));
    strcpy(data[a], buf);
}

现在您可以打印了:

for(a=1;a<=number;a++)
{
    printf("Your data No_%d: is %s\n",a, data[a]);
}

最后,您必须释放已分配的数据:

for(a=1;a<=number;a++)
{
    free(data[a]);
}
于 2012-10-14T11:57:09.923 回答
0

您需要使用一个字符串数组,以便每次读取都进入一个单独的字符串。这段代码中还有其他多项清理工作——删除未使用的变量、检查输入是否成功、验证输入、在输入数据时回显数据(一种调试技术)、在输入数据后回显数据(另一种调试技术——但您通常使用只有一个),修复调用,scanf()因为它不期望指向数组的指针等。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char data[20][20]; 
    int number = -1,a;

    printf("How many data do you want to store (1-20) ");
    if (scanf("%d", &number) != 1 || number > 20 || number <= 0)
    {
        fprintf(stderr, "Invalid number: %d\n", number);
        return(EXIT_FAILURE);
    }
    for (a=0; a < number; a++)
    {
        printf("Input your data No_%d:       ",a+1);
        if (scanf("%19s", data[a]) != 1)
        {
            fprintf(stderr, "Oops: failed to read anything\n");
            return(EXIT_FAILURE);
        }
        printf("%2d: %s\n", a+1, data[a]);
    }

    for (a = 0; a < number; a++)
        printf("Check %2d: %s\n", a+1, data[a]);

    return 0;
}
于 2012-10-14T12:07:32.767 回答
0

您的代码不太正确。您正在声明一个长度为 20 的字符数组,即一个长度为 20 的字符串。在您的 scanf 中,您然后从offset a写入该数组。您需要做的是删除一个 char 类型的二维数组,然后读入正确的 char 数组,例如:

char[20][20] data;

for(int i = 0;i < 20;i++)
    scanf("%s", &data[i][0]);

此外,在您的循环中,更改a=1a=0. 如果没有,您将循环number-1多次。这是因为,假设number=2在第一个循环中,测试 ( a<number) 将成功。在第二个,a将递增到 2,然后测试将失败,因为a不小于number

于 2012-10-14T11:56:13.237 回答