【发布时间】:2016-02-18 22:21:28
【问题描述】:
我正在为学校创建一个“电话簿”程序。基本上我必须让用户将他们联系人的姓名和电话号码输入到两个不同的数组中。我把那部分记下来了,但是在我必须让用户选择通过姓名或电话号码搜索联系人之后,我遇到了一些问题。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main()
{
int arraysize;
printf("How many phone numbers will you be entering: ");
scanf("%d", &arraysize);
int * phoneNumbers = malloc(arraysize);
char * names = malloc(arraysize);
for (int i = 0; i < arraysize; ++i)
{
printf("Please enter the name of person %d: ", i + 1);
scanf("%s", &names[i]);
printf("Please enter %s's phone number: ", &names[i]);
scanf("%d", &phoneNumbers[i]);
}
char * searchOption;
printf("Would you like to seach via name or phone number? ");
scanf("%s", &searchOption);
if (strcmp(searchOption, "name") == 0)
{
char * searchName;
int element;
bool stop = false;
while (stop = false)
{
searchName = NULL;
printf("\nPlease enter the name you wish to search for: ");
scanf("%s", &searchName);
for (int i = 0; i < arraysize; ++i)
{
if (strcmp(searchName, names[i]) == 0)
{
element = i;
stop = true;
break;
}
}
if (stop = false)
{
printf("\nname not found, please search again!");
}
}
}
我很确定它在调用 strcmp() 时崩溃了,但我不知道为什么
【问题讨论】:
-
while (stop = false)-- 这是一个任务。应该是while (stop == false)。实际上,不,不应该;它应该是while (!stop)。接近尾声的if也是如此。 -
您是否启用了编译器警告?我想编译器会有选择词供您使用
char *searchOption[256];。 -
@EOF:将其传递给
strcmp应该会导致警告(或致命错误)。将其传递给scanf同样不正确,但不一定会触发不够聪明的编译器发出的警告。 (gcc 足够聪明)。 -
您更改了问题中的代码以响应答案,但没有提及您更改了它。 请不要那样做。原来你有
char * searchOption;。您将其更改为char * searchOption[256];,这是一个包含 256 个指针的数组。不要试图“修复”问题中的代码;这样做会使问题和答案都无效。我要回滚你最近的编辑。 -
@EOF:代码已编辑。我已经回滚了。
标签: c string pointers scanf strcmp