- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我这里有一个程序可以显示输入日期的下一天。这不是一个实用或高效的程序,我只是用它来测试我学到的概念。它工作了一段时间,但是在了解了 typedef 语句之后,我尝试将它们用于程序的结构“weekday”来声明该类型的变量,但随后删除了 typedef,因为它会产生错误(例如“不兼容的指针”和“不完整的定义”)。现在,即使我删除了 typedef 语句,文件仍会显示错误。最奇怪的是,如果我将所有代码复制并粘贴到一个新文件中,错误就不会出现。有谁知道可能导致错误的原因是什么?
#include <stdio.h>
#include <stdbool.h>
struct weekday {
char *ptrday;
struct weekday *next;
};
void matchtest(char *eday, struct weekday *head, struct weekday *cursor) {
cursor=head;
bool equalstring=true;
while (cursor!=NULL) {
char *p=cursor->ptrday;
equalstring=true;
while (*eday!='\0') {
if (*eday!=*p) {
equalstring=false;
break;
}
++eday; ++p;
}
if (equalstring==1) {
printf("The next day of the week is %s\n", cursor->next->ptrday);
break;
}
cursor=cursor->next;
}
if (equalstring==false)
printf("The next day of the week is Sunday\n");
}
int main (void) {
char enteredday[80], *ptreday=enteredday;
struct weekday sunday, monday, tuesday, wednesday, thursday, friday, saturday;
struct weekday *head=&sunday;
struct weekday *cursor=NULL;
sunday.ptrday="Sunday"; monday.ptrday="Monday"; tuesday.ptrday="Tuesday";
wednesday.ptrday="Wednesday"; thursday.ptrday="Thursday";
friday.ptrday="Friday"; saturday.ptrday="Saturday";
sunday.next=&monday; monday.next=&tuesday; tuesday.next=&wednesday;
wednesday.next=&thursday; thursday.next=&friday; friday.next=&saturday;
saturday.next=NULL;
printf("This is a test for the next day of the week.\n\n");
printf("Enter a day ");
scanf("%s", enteredday);
matchtest(ptreday, head, cursor);
return 0;
}
最佳答案
您遇到的一个问题是您修改了 eday
在比较器函数中,但是如果比较失败,则无法将搜索设置为从字符串的开头开始,因为您不再知道字符串从哪里开始。这会影响“星期四”,它报告“下一天”是星期日。对于其他一些测试,这工作正常。由于困惑,周六后的第二天被报告为周日。
你还有一个问题,星期六后的那一天是未定义的。
这是有效的代码。我用 strcmp()
(因此也是 <string.h>
)进行比较。我转换了 while (cursor != NULL)
循环到 do { ... } while (cursor != head);
循环,使循环链表正常工作。我还打印读取的输入,并在正式输出中再次打印。这允许我使用 bash
进行测试的 Here String方便的符号 ( <<< string
)。请注意,输入检查 EOF 并将输入字符串限制为 79 个字符,以防止缓冲区溢出(也称为堆栈溢出)。该函数的“游标”参数是不必要的;它在调用代码中设置为 null,但被调用函数立即将其设置为 head
.因此该参数不再存在,但仍然需要该变量,因此它对函数来说是纯粹的本地变量。
#include <stdio.h>
#include <string.h>
struct weekday
{
char *ptrday;
struct weekday *next;
};
static void matchtest(char *eday, struct weekday *head)
{
struct weekday *cursor = head;
do
{
if (strcmp(eday, cursor->ptrday) == 0)
{
printf("The next day of the week after %s is %s\n", eday, cursor->next->ptrday);
return;
}
cursor = cursor->next;
} while (cursor != head);
printf("The 'day of the week' %s does not match any day of the week!\n", eday);
}
int main(void)
{
char enteredday[80];
struct weekday sunday, monday, tuesday, wednesday, thursday, friday, saturday;
struct weekday *head = &sunday;
sunday.ptrday = "Sunday";
monday.ptrday = "Monday";
tuesday.ptrday = "Tuesday";
wednesday.ptrday = "Wednesday";
thursday.ptrday = "Thursday";
friday.ptrday = "Friday";
saturday.ptrday = "Saturday";
sunday.next = &monday;
monday.next = &tuesday;
tuesday.next = &wednesday;
wednesday.next = &thursday;
thursday.next = &friday;
friday.next = &saturday;
saturday.next = &sunday;
printf("This is a test for the next day of the week.\n\n");
printf("Enter a day ");
if (scanf("%79s", enteredday) == 1)
{
printf("Got: [%s]\n", enteredday);
matchtest(enteredday, head);
}
return 0;
}
$ for d in Sunday Monday Tuesday Wednesday Thursday Friday Saturday Otherday; do ./nwd <<< $d; done
This is a test for the next day of the week.
Enter a day Got: [Sunday]
The next day of the week after Sunday is Monday
This is a test for the next day of the week.
Enter a day Got: [Monday]
The next day of the week after Monday is Tuesday
This is a test for the next day of the week.
Enter a day Got: [Tuesday]
The next day of the week after Tuesday is Wednesday
This is a test for the next day of the week.
Enter a day Got: [Wednesday]
The next day of the week after Wednesday is Thursday
This is a test for the next day of the week.
Enter a day Got: [Thursday]
The next day of the week after Thursday is Friday
This is a test for the next day of the week.
Enter a day Got: [Friday]
The next day of the week after Friday is Saturday
This is a test for the next day of the week.
Enter a day Got: [Saturday]
The next day of the week after Saturday is Sunday
This is a test for the next day of the week.
Enter a day Got: [Otherday]
The 'day of the week' Otherday does not match any day of the week!
$
如您所知,我不喜欢多次输入。
typedef
也可以在数组中使用链表(尽管您也可以只使用日期名称数组)。
#include <stdio.h>
#include <string.h>
typedef struct Weekday Weekday;
struct Weekday
{
char *ptrday;
Weekday *next;
};
Weekday days_of_the_week[7] =
{
{ "Sunday", &days_of_the_week[1] },
{ "Monday", &days_of_the_week[2] },
{ "Tuesday", &days_of_the_week[3] },
{ "Wednesday", &days_of_the_week[4] },
{ "Thursday", &days_of_the_week[5] },
{ "Friday", &days_of_the_week[6] },
{ "Saturday", &days_of_the_week[0] },
};
static void matchtest(char *eday, Weekday *head)
{
Weekday *cursor = head;
do
{
if (strcmp(eday, cursor->ptrday) == 0)
{
printf("The next day of the week after %s is %s\n", eday, cursor->next->ptrday);
return;
}
cursor = cursor->next;
} while (cursor != head);
printf("The 'day of the week' %s does not match any day of the week!\n", eday);
}
int main(void)
{
char enteredday[80];
printf("This is a test for the next day of the week.\n\n");
printf("Enter a day ");
if (scanf("%79s", enteredday) == 1)
{
printf("Got: [%s]\n", enteredday);
matchtest(enteredday, days_of_the_week);
}
return 0;
}
关于使用然后删除 typedef 语句后 C 链表不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20603872/
我最近更新了 ADT 插件,我的整个 Eclipse-Android 构建系统都停止工作了。从那以后,我尝试了我在互联网上可以找到的所有关于如何解决这个问题的方法。徒然。如果有人有确定的方法来解决此问
我已经知道有类似的话题,但对我来说没有任何帮助...... 这里是信息: 该应用程序始终在模拟器和设备上运行。我最近将该项目重命名为另一个名称。仍然工作得很好。今天我意识到它没有更改文件夹名称,然后它
在装有El Capitan的MacMini上,我无法再进行冲泡了。我收到以下错误: /usr/local/Library/Homebrew/config.rb:34:in `initialize':
是的,所以我不知道发生了什么。我一直在编写一个 AJAX 评论脚本,并且它可以工作,但它不再工作了。我从备份中恢复了它,以防万一我改变了任何东西,但没有运气。它转到表单的“操作”而不是 jQuery,
请原谅我的无能...我正在尝试在全局 var 阶段不再未定义后使用 Proxy 执行一些代码。这是我天真的尝试: ``` var stage = undefined let myObj; let st
我对 segues 了解不多,但我已经开始工作了..但突然间它不再工作了...... 我的代码似乎可以工作,但没有发生 segue: NSLog(@"login started"); if ([use
我已将以下重写规则添加到我的 web.config 中。它运行良好,阻止了所有提及的推荐垃圾邮件站点。然而,今天我突然注意到 social-buttons.com 突然出现在我的 Google Ana
在 C++ 中,可以在翻译单元中使用 static 关键字来影响符号(变量或函数声明)的可见性。 在 n3092 中,这已被弃用: Annex D.2 [depr.static] The use of
升级到 com.crashlytics.sdk.android:crashlytics:2.7.1@aar 后(从 2.6.8 开始),我无法再在 Firebase 应用中禁用 Crashlytics
您好,我遇到了一些障碍,我一直在为我的应用程序重新设计菜单导航。我设法做到了。但现在我的应用程序的一项功能已决定停止运行。 想法是你摇动你的手机,它会随机选择一张图片,与应用程序分开的代码工作正常,就
我有一行(容器)包含三个元素,我想水平显示它们之间的间距相等(并且行的左侧或右侧没有空格)。我正在使用带有 justify-content:space-between 的 flexbox。 这是在 F
直到最近,我才能够在 Windows 上使用 python 3.6.7 时安装 tensorflow 1.5.0 包。现在我不能,从下面的“来自版本”的消息来看,似乎根本没有可用的 tensorflo
不确定是否与最近的更新有关,但我突然无法在 Android Studio 编辑器中获得单行间距。如果我尝试将它更改为 1,它让我设置它,但当我按下“应用”时,它会迅速恢复为 1.5。用不同的字体试过,
我遵循了有关如何在 macOS 上安装 pip 的在线说明(例如 this、this 和 this)。 我看起来很简单,但它不适合我。 我的 python --version 是 2.7.10。 当我
Due to rounding errors, most floating-point numbers end up being slightly imprecise. https://www.flo
我试图让用户从他们在 Android 上的库中选择一张图片。但是当我使用 PictureChooser 插件时,它似乎不再起作用了 我看到这段代码可以工作,但现在不行了,我也不知道为什么。
自 .NET 4.5 起,Exception.HResult 的 setter/getter 现在是 public,但它曾经是 protected。 来自 MSDN: Starting with th
今天去处理一个较旧的 Python2.7 AppEngine 标准项目,但我似乎无法让端点工作。我下载了示例代码,看看我的项目是否是罪魁祸首,但该示例也不起作用。 https://cloud.goog
我是一名优秀的程序员,十分优秀!