C 如何读取带空格的结构中的字符串?
我们的公司办公室需要一个应用程序,该应用程序将维护钦奈的所有注册大学,并且该应用程序在搜索大学时应方便用户。创建一个名为“University”的结构,该结构具有以下属性:名称、许可证号和区号 要求:大学的许可证编号应为6位,前2位必须为大写字母,后4位必须为数字C 如何读取带空格的结构中的字符串?,c,struct,C,Struct,我们的公司办公室需要一个应用程序,该应用程序将维护钦奈的所有注册大学,并且该应用程序在搜索大学时应方便用户。创建一个名为“University”的结构,该结构具有以下属性:名称、许可证号和区号 要求:大学的许可证编号应为6位,前2位必须为大写字母,后4位必须为数字 #include <stdio.h> #include <stdlib.h> #include <string.h> struct University { char name[100];
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct University
{
char name[100];
char license[10];
int area;
}u[10];
void main()
{
int i, n, r, k = 0, flag = 1, f2 = 1, j, search = 0;
char s[100];
printf("Enter the number of records\n");
scanf("%d", &n);
printf("Enter the details of %d universities\n", n);
for (i = 0; i<n; i++)
{
printf("Name of the University\n");
getchar();
scanf("%s", u[i].name);
j = strlen(u[i].name);
if (j <= 1)
{
f2 = 0;
break;
}
printf("License Number\n");
scanf("%s", u[i].license);
k = strlen(u[i].license);
if (k<1)
{
f2 = 0;
break;
}
if (k<6)
{
flag = 0;
}
else if ((u[i].license[0] >= 'A' && u[i].license[0] <= 'Z') && (u[i].license[1] >= 'A' && u[i].license[1] <= 'Z') && (u[i].license[2] >= '0' && u[i].license[2] <= '9') && (u[i].license[3] >= '0' && u[i].license[3] <= '9') && (u[i].license[4] >= '0' && u[i].license[4] <= '9') && (u[i].license[5] >= '0' && u[i].license[5] <= '9') && k == 6)
{
flag = 1;
}
else
{
flag = 0;
}
printf("Area Code\n");
scanf("%d", &u[i].area);
//printf("%d",u[i].area);
if (u[i].area <= 0)
{
f2 = 0;
}
}
if (flag == 0)
{
printf("Sorry! You have entered incorrect license number.");
}
else if (f2 == 0)
{
printf("Unable to continue");
}
else
{
printf("Enter the name of the University to be searched\n");
scanf("%s", s);
for (i = 0; i<n; i++)
{
if ((strcmp(u[i].name, s)) == 0)
{
search = 1;
}
}
if (search == 1)
{
printf("University is licensed one.");
}
else
{
printf("University is not found.");
}
}
}
#包括
#包括
#包括
结构大学
{
字符名[100];
字符许可证[10];
内部区域;
}u[10];
void main()
{
int i,n,r,k=0,flag=1,f2=1,j,search=0;
chars[100];
printf(“输入记录数\n”);
scanf(“%d”和“&n”);
printf(“输入%d所大学的详细信息,\n”,n);
对于(i=0;i,您似乎只对读取包含空格的c字符串感兴趣。为此,您可以使用fgets
。下面是一个玩具程序:
#include <stdio.h>
#include <string.h>
struct s {
char name[100];
int something;
};
int main(void)
{
struct s myStruct;
printf("%s", "Enter name: ");
fgets(myStruct.name, 100, stdin);
myStruct.name[strlen(myStruct.name) - 1] = '\0'; //This should remove the newline char at the end
printf("Name is: %s", myStruct.name);
}
#包括
#包括
结构{
字符名[100];
智力的东西;
};
内部主(空)
{
结构的myStruct;
printf(“%s”,“输入名称:”);
fgets(myStruct.name,100,标准名称);
myStruct.name[strlen(myStruct.name)-1]='\0';//这将删除末尾的换行符
printf(“名称为:%s”,myStruct.Name);
}
请给出一些输入和预期/实际输出的示例。整个程序逻辑错误且过于复杂。使用scanf
读取用户输入的用途有限,因为它忽略了新行。它需要更多的错误检查。特别是,如果下一个标记不是一个标记,%d
格式将不会消耗流编号和%s
格式将只读取到下一个空格的字符串。如果您输入的是“New Delhi”、“AA9876”和“123”,则名称为“New”,许可证为“Delhi”而且该区域根本不会被读取。丢失所有标志,改用正则表达式。告诉我如何在结构化数组中读取带空格的字符串,因为我多次遇到这个问题:myStruct.name[strlen(myStruct.name)-1]
允许黑客通过在fgets()中输入一个空字符作为第一个字符进行攻击<代码> > MyStult.Name(0)='' 0′] < <代码> >或简单地使用<代码> MyStult.Name [ STRCSPN(MyStult.Name),\n′] ];< /Cord> @ CHUX谢谢您指出这一点。我还在学习。BTW:考虑删除“您的程序过于复杂和过于复杂”。因为它并没有给这个答案增加客观的价值。我也使用了它。但它也创造了同样的价值error@PrakharDubey什么错误?复制粘贴我的玩具程序,看看是否有“错误”。