作为一个小背景,我对C编程语言很陌生,因此一直试图完成第二版Kernighan&Ritchie手册中的一些练习.我确实意识到我可以通过更多地使用标准库来更简洁地处理某些问题,但是我试图尽可能地保持我的有用命令的所有内容与本书保持同步.
如果它有所不同,我正在使用Tiny C编译器(TCC)在Windows XP环境中编译我的源代码,并在XP控制台(cmd.exe)中执行二进制文件.
问题:处理End-of-File (EOF) characters.我已经整理了一个小测试用例来说明问题.该程序似乎处理EOF字符(部分).我将尝试用样本输入/输出来演示问题.
#include <stdio.h>
int main()
{
int character, count;
character = 0;
character = getchar();
for (count = 0; character != EOF; ++count)
{
character = getchar();
}
printf("Count: %d", count);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
示例输入1 :( abcd^Z[enter]其中^ Z/CTRL + Z表示EOF字符,[enter]表示Enter键.)
示例输出1 :( Count: 4等待更多输入或在^ C/^ Z [enter]上正确结束)
样本输入2: abcd^Zefgh
示例输出2 :( Count: 4等待更多输入或在^ C/^ Z [enter]上正确结束)
如两个示例中所述,在启动^ C/^ Z [enter]序列之前不输出字符计数.在启动之前,程序会等待(并确实处理)更多输入.但是,如示例2中所述,当程序遇到初始^ Z时,如果启动^ C/^ Z [enter]序列,它将停止处理该输入行,等待更多输入或返回正确计数.
我无法弄清楚为什么程序只是部分处理EOF字符.在我看来,如果它截断样本2的末尾,它也应该完全脱离循环.任何想法为什么在识别EOF字符时程序不会立即打印当前计数并退出?
我如何编写单元测试来测试方法将记录添加到数据库的能力?目前,我有以下内容:
[TestMethod]
public void AddUserTest()
{
Boolean expected = true;
Boolean result = UserManager.AddUser(test);
Assert.AreEqual(expected, result);
}
Run Code Online (Sandbox Code Playgroud)
如果我只测试将记录添加到数据库的能力(不必担心记录是否已存在),这适用于此.但是,我不确定如何编写测试,如果由于预先存在的记录而提交失败,它仍然会通过.
如果它有所作为,我正在使用LINQ to SQL进行数据库事务.根据我在MSDN文档中收集的内容,DataContext.SubmitChanges()没有返回值,所以我也不确定如何确定特定事务是否成功.
我将继续查看文档.Perhaps DataContext.SubmitChanges()在记录冲突或其他故障时抛出异常,我可以在单元测试中捕获?
#include <stdio.h>
#define MAXLENGTH 77
int getline(char[], int);
main() {
char in_line[MAXLENGTH];
int count, in_line_length;
in_line_length = 0;
for (count = 0; count < MAXLENGTH; ++count)
in_line[count] = 0;
in_line_length = getline(in_line, MAXLENGTH);
printf("%s", in_line);
}
int getline(char line[], int max_length) {
int count, character;
character = 0;
for (count = 0; count < (max_length -2) && (character = getchar()) != EOF && character != '\n'; count++) {
line[count] = character;
}
if (character = '\n') {
line[count++] = '\n'; …Run Code Online (Sandbox Code Playgroud)