使用c和do-while循环在结构对象中存储值

问题描述:

我试图在struct对象中存储一些值,并且我想重复提示,直到用户输入“yes”。我想为此使用一个do-while循环。我已经失败了第一个“姓氏”的读入。当我输入某些内容时,程序停止(没有错误)。我甚至没有使用do-while,因为我不确定它是否能用于我的while()条件。

使用c和do-while循环在结构对象中存储值

#include <ctype.h> 
#include <stdio.h> 
#include <string.h> 

struct employeelist 
{ 
char last[6]; 
char first[6]; 
int pnumber; 
int salary; 
}; 

int main() 

{ 
struct employeelist employee[5]; 
char check; 

//do 
//{ 
printf("Hello. Please type in the last name, the first name, the personal number and the salary of your employees.\n"); 
printf("Last name: "); 
scanf("%c", employee[1].last); 

printf("First name: "); 
scanf("%c", employee[1].first); 

printf("Personal number: "); 
scanf("%d", &employee[1].pnumber); 

printf("Salary: "); 
scanf("%d", &employee[1].salary); 

printf("You have more employess (yes/no)?: "); 
scanf("%c", &check); 
//}while (scanf("yes")); 

return 0; 
} 
+0

你确实意识到你实际上没有提出问题,对吧?你遗弃了一堆代码,并说,“它不工作”。 – abelenky 2010-11-19 19:37:56

+0

对不起,我会在下次尝试更具体。这不是我为学校做的功课,我只是为自己学习。 – Ordo 2010-11-19 19:43:50

使用%s为您的格式说明,如果你想获得一个字符串。您可能还想将其长度限制为5,因为这对于lastfirst有多少空间。所以那将是%5s。另外,5个字符对于名称来说很短。

另一种评论:C中的数组是从零开始的,所以employee[1]是数组中第二个employeelist。如果你想在一个带有递增索引的循环中做到这一点,从0开始。

+0

谢谢!是否有必要给char [length]赋值? – Ordo 2010-11-19 19:41:21

+1

@Ordo:排序。如果你想在运行时为字符串动态分配空间,那么就有一个GNU扩展,它允许你在转换说明符中使用'a'来让'scanf'调用'malloc'。当然,这可能不适用于微软的C++编译器。您也可以自己调用malloc,但对于作业而言,静态分配大型缓冲区并使用格式说明符让您的用户保持其状态可能最容易。 – nmichaels 2010-11-19 19:45:48

+0

如果你想存储它在一个字符数组中,那么你必须指定长度,除非你计划mallocing一个 – prelic 2010-11-19 19:51:39

嗨,当你读取char数组时,你必须使用scanf(“%s”,employee [1] .last); %s但不是%c

您认为这段代码有什么作用?

scanf("%c", .... 

%c表明,scanf函数应该只读ONE字符。
一个字母不会给你一个完整的名字。

您需要切换到%s初学者。

  1. 首先第一个索引的工作 将可“0”,而不是1
  2. 错误标识字符串,它 应该是%S。
  3. 如果你只是想通过 迭代问Y/N然后就从是/否改变 显示消息,Y/N ,改变了怪了,而 条件检查==“Y” ||检查= = 'Y'。
  4. 的代码将实际上不是经过5次迭代是type.Why你不添加在 的循环,因为你 初始化 只有5层结构工作 ?