2012-10-14 58 views
-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是我想查看这2个数据。 有人可以给我一个示例代码。如何查看存储的字符串

+2

你没读过回答你刚才的问题不够好。数组索引从0开始,而不是从1开始。 – Mat

+0

两个重要的事情不能回答你的问题:大多数编程语言(包括C)中的数组索引都以0开头,所以它应该是for(a = 0; a 20)return 1;'的检查 – stefan

+0

我在我的程序中改变了它..它仍然不起作用。 – JUB

回答

0

您的代码不完全正确。您正在声明一个长度为20的字符数组,即一个长度为20的字符串。在您的scanf中,您将写入的偏移量a。你需要做的是delcare 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

1

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

不幸的是,在C字符串操作是远远复杂得多 - 你需要一个二维数组或指针数组正确地做你的任务:

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]); 
} 
0

e字符串数组,以便每次读取进入单独的字符串。此代码中还有多个其他清理工具 - 删除未使用的变量,检查输入是否成功,验证输入,输入时回显数据(调试技术),输入数据后回显数据(另一种调试技术 - 但您通常使用只有一个),呼叫固定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; 
} 
+0

@ Jonathan我尝试运行你的程序,输入数据后就退出了。 – JUB