你如何查看存储的字符串

时间:2012-10-14 11:50:38

标签: c

#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是我要查看这2个数据。 有人可以给我一个示例代码。

3 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分:0)

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

char[20][20] data;

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

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

答案 2 :(得分: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;
}