正如我在上一个问题中可能没有提到的那样,我是C编程的新手,并且仅具有Java的使用经验,因此我在使用Structs和Pointers方面不称职,并且可能没有很好地掌握这些概念。第一次。
所以我在玩C语言,并在下面尝试了以下程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define buf_sz 32
struct friends {
char name[buf_sz];
int number;
};
typedef struct friends friend;
void addfriend (friend * friendArr, int index);
void removefriend (friend * friendArr);
void main () {
int index;
int troll;
friend friendArr[50];
printf("1. Add Friend Name, 2. Remove Friend. Other buttons. Do nothing\n");
scanf(" %d", &troll);
while ((troll == 1) && (troll == 2)) {
switch (troll) {
case 1: addfriend(friendArr, index);
index++;
break;
case 2: removefriend(friendArr);
break;
default: break;
}
}
for (int i = 0; i < 50; i++) {
if (friendArr[i].name != NULL) {
printf("%s\t%d\n", friendArr[i].name, friendArr[i].number);
}
}
}
void addfriend (friend * friendArr, int index) {
char buf[buf_sz];
int number;
printf("Add a friend's name\n");
fgets(buf, buf_sz-1, stdin);
sscanf(buf, " %s", friendArr[index].name);
printf("Add his number\n");
scanf(" %d", &number);
friendArr[index].number = number;
}
void removefriend (friend * friendArr) {
char buf[buf_sz];
char name[buf_sz];
int check;
printf("Add a friend's name you wanna remove\n");
fgets(buf, buf_sz-1, stdin);
sscanf(buf, " %s", name);
for (int i = 0; i < 50; i++) {
if (friendArr[i].name == name) {
strcpy(friendArr[i].name, "");
}
}
}
我的输出为:
1. Add Friend Name, 2. Remove Friend. Other buttons. Do nothing
1
@R 2009984
0
624
4
v 144
0
l� 685382481
32767
��G� 364104144
0
0�G� 368262747
32517
@�G� 440903072
� 32517
368167105
32517
�G� 370332944
32517
_�g 370428400
32517
368167105
32517
364032000
0
0
32517
�I 368217097
0
��G� 368166640
32517
��� 370428400
0
' 0
0
pQ 368182487
32517
370431760
0
��� 0
0
8W 0
32767
W 440904224
� 32517
��� 370432664
0
0
32517
��G� 368232864
32767
基本上是一堆奇怪的数字,我不明白。
所需的输出将是一条消息,以打印问题,如果按1则添加用户名和号码,如果按2则删除用户,然后打印所有用户。
我相信这里的问题是我将数组传递给struct,但是我不确定。
我到处都在搜索Stack Overflow,以查找可能出错的地方,但找不到任何有用的东西。
您友善的人能指出我出了错吗?
答案 0 :(得分:0)
您需要初始化变量:
void main () {
int index = 0; // <<-- THIS
int troll;
// Make some friends
friend friendArr[50];
for (int i=0; i<50; i++)
friendArr[i].name[0] = '\0'; // <<-- AND THE NAME
打印出朋友列表时,成员名称不能与NULL
进行比较,因为它们不是指针。 (可以将它们进行比较,但这没有任何意义)。最好将数据集初始化为空白,然后检查是否有名称集。
for (int i = 0; i < 50; i++)
{
if (friendArr[i].name[0] != '\0')
{
printf("%s\t%d\n", friendArr[i].name, friendArr[i].number);
}
}
正如@Groo指出的那样,将C字符串与==
进行比较也是无效的。请改用strcmp()
。在这里,我们测试了strcmp()
在字符串相同时是否返回0
。
for (int i = 0; i < 50; i++)
{
if (strcmp(friendArr[i].name, name) == 0)
{
strcpy(friendArr[i].name, "");
}
}