- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想阅读我的文档文件夹中的文本文件。我不明白为什么我看不懂它,或者为什么我不能在我的控制台应用程序上写它。当我运行程序时,它只是卡住了。它什么都不做。
我要阅读的文件:
330400199711111890 W1 ZhejiangJianxin
330411193807234897 W2 ZhejiangJianxinÐãÖÞÇø
331122199502289716 W3 ZhejiangçÆÔÆÏØ
330402192503284421 M1 ZhejiangJianxinÄϺþÇø
330225198403042936 W4 ZhejiangÏóɽÏØ
330681194109099151 W5 ZhejiangÖîôßÊÐ
330727195612078712 W6 ZhejiangÅÍ°²ÏØ
330921193708179044 M2 Zhejiangá·É½ÏØ
330303195103046912 W7 ZhejiangWenzhouÁúÍåÇø
330781197108138752 W8 ZhejiangÀ¼ÏªÊÐ
330127193411280584 M3 Zhejiang´¾°²ÏØ
331001193310027792 W9 ZhejiangTaizhouDowntown
331125196503132898 W10 ZhejiangÔƺÍÏØ
331000192003056719 W11 ZhejiangTaizhou
330106194503103959 W12 ZhejiangHangzhouWestlakeDistrict
330106194610285524 M4 ZhejiangHangzhouWestlakeDistrict
330301198301227758 W13 ZhejiangWenzhouDowntown
#include <stdio.h>
#include <stdlib.h>
#define NAME_LEN 80
// struct with student information. id, name and address
typedef struct
{
char id[19];
char code[20];
char address[50];
} Student;
int main()
{
Student newStudent;
FILE *fp;
fp=fopen("ID500.txt","r");
char id[20],code[20],address[50];
while(!feof(fp))
{
fscanf(fp,"%s %s %s",id,code,address);
printf("%s %s %s\n",id,code,address);
}
return 0;
}
最佳答案
最好将文件名作为命令行参数提供给您的程序,因为它使测试和使用更加容易。
在文件中,每一行似乎是一个单独的记录。因此,最好先读取每一行,然后解析该行中的字段。
考虑以下:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#define MAX_LINE_LEN 500
int main(int argc, char *argv[])
{
char line[MAX_LINE_LEN + 1]; /* +1 for the end-of-string '\0' */
FILE *in;
if (argc != 2) {
fprintf(stderr, "\n");
fprintf(stderr, "Usage: %s FILENAME\n", argv[0]);
fprintf(stderr, "\n");
return EXIT_FAILURE;
}
in = fopen(argv[1], "r");
if (!in) {
fprintf(stderr, "Cannot open %s: %s.\n", argv[1], strerror(errno));
return EXIT_FAILURE;
}
while (fgets(line, sizeof line, in) != NULL) {
char id[20], code[20], address[50], dummy;
if (sscanf(line, " %19s %19s %49s %c", id, code, address, &dummy) == 3) {
/* The line did consist of three fields, and they are
now correctly parsed to 'id', 'code', and 'address'. */
printf("id = '%s'\ncode = '%s'\naddress = '%s'\n\n",
id, code, address);
} else {
/* We do have a line, but it does not consist of
exactly three fields. */
/* Remove the newline character(s) at the end of line. */
line[strcspn(line, "\r\n")] = '\0';
fprintf(stderr, "Cannot parse line '%s'.\n", line);
}
}
if (ferror(in)) {
fprintf(stderr, "Error reading %s.\n", argv[1]);
return EXIT_FAILURE;
} else
if (fclose(in)) {
fprintf(stderr, "Error closing %s.\n", argv[1]);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
argc
包含许多命令行参数,程序名称用作第一个(第零个,
argv[0]
)参数。我们需要两个:程序名和要读取的文件名。否则,我们将打印出使用情况消息。
fopen()
失败,则返回
NULL
,错误存储在
errno
中。
strerror(errno)
产生人类可读的错误消息。
fgets(array, sizeof array, stream)
从
array
读取一行(除非太长以至于不能放入
stream
中)。如果成功,它将返回指向
array
中第一个元素的指针。如果失败(例如,不再需要读取),它将返回
NULL
。
feof(stream)
不会检查
stream
是否有更多数据要读取。它仅报告
stream
的结尾是否已经遇到。因此,与其读取直到
feof()
返回true,不如直接读取数据直到读取失败,然后检查读取失败的原因。这就是上面的示例程序所做的。
fscanf()
不能将
'\n'
与空格区分开(在转换规范中或隐式跳过空格时),所以使用
fscanf(in, " %19s %19s %49s", ...)
不会将解析限制为一行:它们可以在同一行上,也可以在同一行上不同的行,或者之间有空行。为了将解析限制为一行,我们首先使用
fgets()
读取每一行,然后尝试使用
sscanf()
解析该行,并且仅解析该行。 (
sscanf()
的作用与
fscanf()
相同,但其输入是从字符串而不是流中获取的。)
sscanf()
缓冲区可以使用多长时间,记住要为字符串结尾标记(NUL,
'\0'
)保留一个字符。由于
id
的长度为20个字符,因此ID字符串最多可以使用19个字符,因此我们需要使用
%19s
正确进行转换。
sscanf()
的返回值是成功转换的次数。通过在正常情况下我们预期会失败的末尾添加虚拟字符(
%c
)转换,我们可以检测行中包含的字符是否超出预期。这就是
sscanf()
模式进行四次转换的原因,但是如果输入行具有我们期望的格式,我们就要求它们中的前三项必须成功,而第四项(虚拟)必须失败。
sscanf()
表达式。我喜欢称这种推测性解析。您只需要订购它们,以便您首先尝试最复杂的产品,然后接受第一个产生预期成功转换次数的产品。有关实际示例,请检查
example C code I used in another answer,以允许用户在命令行上使用名称=值对指定模拟详细信息。
line[strcspn(line, "\r\n")] = '\0';
表达式确实是一个技巧。
strcspn()
是标准的C
<string.h>
函数,该函数返回第一个字符串参数中的字符数,直到遇到字符串结尾或第二个字符串中的任何字符,以先发生的为准。因此,
strcspn(line, "\r\n")
产生
line
中的字符数,直到遇到字符串,
'\r'
或
'\n'
的结尾(以先发生的为准)。我们通过使用其余部分作为行缓冲区的索引来修剪字符串的其余部分,并使字符串在此结束。 (请记住,NUL或
'\0'
始终以C结尾该字符串。)
while
循环之后,我们检查为什么
fgets()
返回
NULL
。如果
ferror()
返回true,则存在实际读取错误。这些在当今非常罕见,但是不进行检查就像在没有安全保障的情况下带着武器走来走去:这是零回报的不必要风险。
fclose()
甚至都不会失败,但是在某些情况下可能会发生某些特殊情况。 (此外,当您写入流时,它可能会失败,因为C库可能会缓存数据-将其保存在内部缓冲区中,而不是出于效率考虑而立即将其写入-仅在关闭流时才将其写出。像任何写入一样,由于实际的写入错误,该操作可能会失败;例如,如果存储介质已满。)
ferror()
和
fclose()
,并让用户知道。我个人深深地讨厌那些不这样做的程序,因为它们确实有可能在没有警告的情况下无声地丢失用户数据。用户可能认为一切都很好,但是下次他们尝试访问其文件时,其中的一些文件便丢失了……他们通常最终都将责任归咎于操作系统,而不是真正的罪魁祸首,导致程序失败的恶意程序。向用户警告他们可能已经检测到的错误。
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <wchar.h>
#include <stdio.h>
#include <errno.h>
#define MAX_WLINE_LEN 500
int main(int argc, char *argv[])
{
wchar_t line[MAX_WLINE_LEN + 1]; /* +1 for the end-of-string L'\0' */
FILE *in;
if (argc != 2) {
fprintf(stderr, "\n");
fprintf(stderr, "Usage: %s FILENAME\n", argv[0]);
fprintf(stderr, "\n");
return EXIT_FAILURE;
}
if (setlocale(LC_ALL, "") == NULL)
fprintf(stderr, "Warning: Your C library does not support your currently set locale.\n");
if (fwide(stdout, 1) < 1)
fprintf(stderr, "Warning: Your C library does not support wide standard output.\n");
in = fopen(argv[1], "r");
if (!in) {
fprintf(stderr, "Cannot open %s: %s.\n", argv[1], strerror(errno));
return EXIT_FAILURE;
}
if (fwide(in, 1) < 1)
fprintf(stderr, "Warning: Your C library does not support wide input from %s.\n", argv[1]);
while (fgetws(line, sizeof line / sizeof line[0], in) != NULL) {
wchar_t id[20], code[20], address[50], dummy;
if (swscanf(line, L" %19ls %19ls %49ls %lc", id, code, address, &dummy) == 3) {
/* The line did consist of three fields, and they are
now correctly parsed to 'id', 'code', and 'address'. */
wprintf(L"id = '%ls', code = '%ls', address = '%ls'\n",
id, code, address);
} else {
/* We do have a line, but it does not consist of
exactly three fields. */
/* Remove the newline character(s) at the end of line. */
line[wcscspn(line, L"\r\n")] = L'\0';
fprintf(stderr, "Cannot parse line '%ls'.\n", line);
}
}
if (ferror(in)) {
fprintf(stderr, "Error reading %s.\n", argv[1]);
return EXIT_FAILURE;
} else
if (fclose(in)) {
fprintf(stderr, "Error closing %s.\n", argv[1]);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
关于c - 使用c从计算机读取和打印文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51083902/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!