我刚刚学习了数组。我试图使用数组创建一个数据库程序。这是一个非常基本的计划。
#include<stdio.h>
#define N 1 //number of entries needed
int main()
{
int i, k = 1, l = 1, w, x = 0, y = 0;
int rollnum[N], hsc[N], cet[N], a[N], b[N];
char name[100], city[100], c;
for(i = 0; i < N; i++)
{
printf("%d.\n", (i+1));
printf("Enter first name : ");
do
{
c = getchar();
if(c != '\n')
{
name[k] = c;
k++;
}
}
while(c != '\n');
a[i] = k;
k++;
printf("\n");
printf("Enter roll number : ");
scanf("%d", &rollnum[i]);
printf("\n");
getchar();
printf("Enter city : ");
do
{
c = getchar();
if(c != '\n')
{
city[l] = c;
l++;
}
}
while(c != '\n');
b[i] = l;
l++;
printf("\n");
printf("Enter HSC percentage : ");
scanf("%d", &hsc[i]);
printf("\n");
printf("Enter CET marks : ");
scanf("%d", &cet[i]);
printf("\n");
getchar();
}
printf("\n\n\n");
k = 1;
l = 1;
for(i = 0; i < N; i++)
{
printf("Entry %d\n", (i+1));
printf("Student Name : ");
x = (a[i] - x);
for(w = 0; w < x; w++ && k++)
putchar(name[k]);
putchar('\n');
printf("Roll number : %d", rollnum[i]);
printf("\n");
printf("City : ");
y = (b[i] - y);
for(w = 0; w < y; w++ && l++)
putchar(city[l]);
putchar('\n');
printf("Marks : \n");
printf("\t");
printf("HSC : %d ", hsc[i]);
printf("\t");
printf("CET : %d / 200", cet[i]);
printf("\n\n\n");
}
return 0;
}
程序没有按照我想要的方式运行!当我输入一个名字时,第一个字母被打印两次,与城市的情况相同!如果我通过修改我的'N'来输入2个条目,我将获得名称和地址(第二个条目)的第一个字母作为垃圾值。我不认为我的逻辑中有任何错误,因为我尝试在我的笔记本中手动执行它并且我没有发现任何错误。
任何人都可以帮我找到错误吗?我知道这个程序可能根本不是好的和有效的,但我只是在尝试我学到的东西!
答案 0 :(得分:2)
你在初始化一些变量时犯了一些错误。此外,您不必一次读取一个字符串。您可以使用scanf("%s", someString)
来读取整个字符串。
这是一个看起来更清洁的工作代码:
#include<stdio.h>
#define N 2
int main()
{
int rollnum[N], hsc[N], cet[N], i;
char name[100][100], city[100][100];
for(i = 0; i < N; i++)
{
printf("%d.\nEnter first name : ", (i+1));
scanf("%s", name[i]);
printf("\nEnter roll number : ");
scanf("%d", &rollnum[i]);
printf("\nEnter city : ");
scanf("%s", city[i]);
printf("\nEnter HSC percentage : ");
scanf("%d", &hsc[i]);
printf("\nEnter CET marks : ");
scanf("%d", &cet[i]);
printf("\n");
}
printf("\n\n\n");
for(i = 0; i < N; i++)
{
printf("Entry %d\nStudent Name : %s\nRoll number : %d\nCity : %s\nMarks : \n\tHSC : %d \tCET : %d / 200\n\n\n", (i+1), name[i], rollnum[i], city[i], hsc[i], cet[i]);
}
return 0;
}
它也适用于多个条目。
为了使您的程序正常工作,您必须将其替换为:
x = (a[i] - x);
for(w = 0; w < x; w++ && k++)
putchar(name[k]);
putchar('\n');
printf("Roll number : %d", rollnum[i]);
printf("\n");
printf("City : ");
y = (b[i] - y);
for(w = 0; w < y; w++ && l++)
putchar(city[l]);
用这个:
if (i == 0)
x = a[i]-1;
else
x = a[i] - a[i-1];
for(w = 0; w < x; w++)
putchar(name[k++]);
putchar('\n');
printf("Roll number : %d", rollnum[i]);
printf("\n");
printf("City : ");
if (i == 0)
y = b[i]-1;
else
y = b[i] - b[i-1];
for(w = 0; w < y; w++)
putchar(city[l++]);
问题是你没有正确计算单词的长度,还有一个我仍然无法解释但我把它删除的错误。