就是让你输入学生的学号,但你不知道用户会输入几个。。。
第1个回答 推荐于2017-11-28
一般情况下,编程前先要进行需求分析,确定学号的最大长度,在输入中加入控制,如:
char stu_num[21] ; //确定最大长度为20个有效字符
getline( stu_num , 20 ); //这样可以确保输入不越界。
对于不确定多少个数据的输入,采用以下办法处理:
while( 1 )
{
char stu_num[21] ; //确定最大长度为20个有效字符
printf("请输入学号,最长20位,直接回车结束输入:");
getline( stu_num , 20 ); //这样可以确保输入不越界。
if ( !stu_num[0] ) //如果输入空值,则退出
break ;
....以下进行其它输入
}本回答被提问者采纳
char stu_num[21] ; //确定最大长度为20个有效字符
getline( stu_num , 20 ); //这样可以确保输入不越界。
对于不确定多少个数据的输入,采用以下办法处理:
while( 1 )
{
char stu_num[21] ; //确定最大长度为20个有效字符
printf("请输入学号,最长20位,直接回车结束输入:");
getline( stu_num , 20 ); //这样可以确保输入不越界。
if ( !stu_num[0] ) //如果输入空值,则退出
break ;
....以下进行其它输入
}本回答被提问者采纳
第2个回答 2013-03-16
不明白,你说输入什么?
从文件读入?不知道文件里面数据有多少?这种情况就用楼上的方法,链表,不过数组嘛,就动态申请空间,malloc一下啦。文件的结束是EOF什么的。可以用FSCANF,FGETS多种方法。
如果是已经有个数组存好数值,但是不知道长度,要输入给函数的话,这个比较麻烦了。
如果是字符数组,你倒是可以判断'\0',数字数组就要看你的数据定义了……
学号……手工输入的肯定多不到哪儿去啊,除非是B/S程序,全世界的用户一起在使用。但那已经不是C语言的管理范围了。学号长大概20位吧,当然都是数字或字母,就用char [],那你开个10万的字符数组,就肯定够大了。
char studentid[100024][20];
从文件读入?不知道文件里面数据有多少?这种情况就用楼上的方法,链表,不过数组嘛,就动态申请空间,malloc一下啦。文件的结束是EOF什么的。可以用FSCANF,FGETS多种方法。
如果是已经有个数组存好数值,但是不知道长度,要输入给函数的话,这个比较麻烦了。
如果是字符数组,你倒是可以判断'\0',数字数组就要看你的数据定义了……
学号……手工输入的肯定多不到哪儿去啊,除非是B/S程序,全世界的用户一起在使用。但那已经不是C语言的管理范围了。学号长大概20位吧,当然都是数字或字母,就用char [],那你开个10万的字符数组,就肯定够大了。
char studentid[100024][20];
第3个回答 2013-03-16
你是说不知道会输入多长还是输入多个学号, 不知道输入多长就定义一个足够长的, 之前写的一个, 可以参考一下, 输入任意长度
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *storage;
int ch;
int str_len = 0;
storage = (char *)calloc(1, 64); /*分配内存*/
while ((ch = fgetc(stdin)) != '\n') {
if ((str_len = strlen(storage)) == (sizeof(storage) - 1)) {
/*增加内存*/
realloc(storage, sizeof(storage) + 64);
}
printf("%d\n", str_len);
memcpy(storage + str_len, &ch, 1); /*内存拷贝*/
}
printf("storage: %s\nlen = %d\n", storage, strlen(storage));
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *storage;
int ch;
int str_len = 0;
storage = (char *)calloc(1, 64); /*分配内存*/
while ((ch = fgetc(stdin)) != '\n') {
if ((str_len = strlen(storage)) == (sizeof(storage) - 1)) {
/*增加内存*/
realloc(storage, sizeof(storage) + 64);
}
printf("%d\n", str_len);
memcpy(storage + str_len, &ch, 1); /*内存拷贝*/
}
printf("storage: %s\nlen = %d\n", storage, strlen(storage));
return 0;
}
第4个回答 2013-03-16
C语言是没有原生的对动态数组的支持的,而且C语言不支持面向对象,根据你这个案例不推荐你自己实现动态数组。
你可以在接受输入时检查当前插入位置有没有越界,一旦数组中的元素数量超过某一特定的阈值就输出到文件中,然后把数组清空,重新使用。
你可以在接受输入时检查当前插入位置有没有越界,一旦数组中的元素数量超过某一特定的阈值就输出到文件中,然后把数组清空,重新使用。