- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:使用普通 c
这部分是指我的最后一个问题,但我现在完全重写了代码大约 3 次,而且我已经陷入了困境。我读过很多关于 2D 数组的不同内容,我对我应该认为正确的东西感到困惑,其他 stackoverflow 帖子让我更加困惑:(
例如:
char array[A][B];
一些消息来源说 A 是 nr。字段的个数,B 是一个字段的长度,也有人说 A 是 nr。行数和 B 的编号。矩阵的列数。其他人说这只能保存单个字符。
继续解决我的问题:
我正在编写一个测验,并且我有一个数据库文件,其中每一行如下所示:
Multiple Words A#Multiple Words B#Multiple Words C
现在我想读取文件并将该行拆分为多个变量,这些变量的定义如下:
char frageinhalt[50][255]; // the question itself (later smth like "capital of germany?"
char antw1[50][255]; // the first answer to the question
char antw2[50][255]; // second answ
行应该像这样分割:
Multiple Words A => frageinhalt
Multiple Words B => antw1
Multiple Words C => antw2
每一行应该在数组中获得一个分配的字段,这样我就可以简单地在其他函数中打印它们。
例如:我想打印第一个问题及其答案
printf("%s,%s,%s",frageinhalt[0],antw1[0],antw2[0]);
但这在我的代码中不起作用。有什么想法吗?
完整代码如下。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int readfromfile(); // func prototype
char data[100]; // a row from the file
char temp[50];
//Fragebezogen
char id[50][5]; // question nr
char frageinhalt[50][255]; // the question itself (later smth like "capital of germany?"
char antw1[50][255]; // the first answer to the question
char antw2[50][255]; // second answ
int main() {
readfromfile();
printf("\nFrageinhalt: %s Antw1: %s Antw2: %s\n", frageinhalt[1], antw1[1], antw2[1]); // Doesn't work properly
return 0;
}
int readfromfile() {
FILE *datei_ptr;
int i = 0;
char ch;
int lines = 0;
int k = 0;
char delimiter[] = ",;#";
char *ptr;
datei_ptr = fopen("test.txt", "r");
if (datei_ptr == NULL) {
printf("nothing left in file");
}
else {
while (!feof(datei_ptr))
{
ch = fgetc(datei_ptr);
if (ch == '\n') // Wenn der gerade gelesene Character ein Zeilenumbruch ist..
{
lines++; // Erhöhe die Anzahl der Zeilen um 1
}
}
fclose(datei_ptr);
datei_ptr = fopen("test.txt", "r");
do {
fgets (data, 255, datei_ptr);
puts(data);
ptr = strtok(data, delimiter);
printf("###############################\n");
while (ptr != NULL)
{
printf("Abschnitt gefunden: %s\n", ptr);
// naechsten Abschnitt erstellen
ptr = strtok(NULL, delimiter);
}
printf("###############################\n");
k++;
} while (k != lines + 1);
fclose(datei_ptr);
}
}
最佳答案
以下建议代码:
stderr
现在,建议的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ROW_LEN 1024
#define MAX_LINES 50
#define MAX_QUESTION_LEN 255
#define MAX_ANSWER_LEN 255
void readfromfile( void ); // func prototype
char data[ MAX_ROW_LEN ]; // a row from the file
//Fragebezogen
char id[ MAX_LINES ][5]; // question nr
char frageinhalt[ MAX_LINES ][ MAX_QUESTION_LEN ]; // the question itself (later smth like "capital of germany?"
char antw1[ MAX_LINES ][ MAX_ANSWER_LEN ]; // the first answer to the question
char antw2[ MAX_LINES ][ MAX_ANSWER_LEN ]; // second answ
int main( void )
{
readfromfile();
printf("\nFrageinhalt: %s Antw1: %s Antw2: %s\n",
frageinhalt[1],
antw1[1],
antw2[1]);
return 0;
}
void readfromfile()
{
FILE *datei_ptr;
char delimiter[] = ",;#";
char *token;
datei_ptr = fopen("test.txt", "r");
if ( !datei_ptr )
{
perror( "fopen failed" );
exit( EXIT_FAILURE );
}
int lineCounter = 0;
while( lineCounter < MAX_LINES && fgets (data, sizeof( data ), datei_ptr) )
{
puts(data);
printf("###############################\n");
token = strtok(data, delimiter);
if ( token )
{
printf("Abschnitt gefunden: %s\n", token);
strncpy( id[ lineCounter ], token, 5 );
token = strtok(NULL, delimiter);
if( token )
{
strncpy( frageinhalt[ lineCounter ], token, MAX_QUESTION_LEN );
token = strtok( NULL, delimiter );
if( token )
{
strncpy( antw1[ lineCounter ], token, MAX_ANSWER_LEN );
token = strtok( NULL, delimiter );
if( token )
{
strncpy( antw2[ lineCounter ], token, MAX_ANSWER_LEN );
}
}
}
}
printf("###############################\n");
lineCounter++;
}
fclose(datei_ptr);
}
关于c - 卡在二维数组上,将指针插入文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775278/
我刚接触 C 语言几周,所以对它还很陌生。 我见过这样的事情 * (variable-name) = -* (variable-name) 在讲义中,但它到底会做什么?它会否定所指向的值吗? 最佳答案
我有一个指向内存地址的void 指针。然后,我做 int 指针 = void 指针 float 指针 = void 指针 然后,取消引用它们以获取值。 { int x = 25; vo
我正在与计算机控制的泵进行一些串行端口通信,我用来通信的 createfile 函数需要将 com 端口名称解析为 wchar_t 指针。 我也在使用 QT 创建一个表单并获取 com 端口名称作为
#include "stdio.h" #include "malloc.h" int main() { char*x=(char*)malloc(1024); *(x+2)=3; --
#include #include main() { int an_int; void *void_pointer = &an_int; double *double_ptr = void
对于每个时间步长,我都有一个二维矩阵 a[ix][iz],ix 从 0 到 nx-1 和 iz 从 0 到 nz-1。 为了组装所有时间步长的矩阵,我定义了一个长度为 nx*nz*nt 的 3D 指针
我有一个函数,它接受一个指向 char ** 的指针并用字符串填充它(我猜是一个字符串数组)。 *list_of_strings* 在函数内部分配内存。 char * *list_of_strings
我试图了解当涉及到字符和字符串时,内存分配是如何工作的。 我知道声明的数组的名称就像指向数组第一个元素的指针,但该数组将驻留在内存的堆栈中。 另一方面,当我们想要使用内存堆时,我们使用 malloc,
我有一个 C 语言的 .DLL 文件。该 DLL 中所有函数所需的主要结构具有以下形式。 typedef struct { char *snsAccessID; char *
指针, C语言的精髓 莫队先咕几天, 容我先讲完树剖 (因为后面树上的东西好多都要用树剖求 LCA). 什么是指针 保存变量地址的变量叫做指针. 这是大概的定义, 但是Defad认为
我得到了以下数组: let arr = [ { children: [ { children: [], current: tru
#include int main(void) { int i; int *ptr = (int *) malloc(5 * sizeof(int)); for (i=0;
我正在编写一个程序,它接受一个三位数整数并将其分成两个整数。 224 将变为 220 和 4。 114 将变为 110 和 4。 基本上,您可以使用模数来完成。我写了我认为应该工作的东西,编译器一直说
好吧,我对 C++ 很陌生,我确定这个问题已经在某个地方得到了回答,而且也很简单,但我似乎找不到答案.... 我有一个自定义数组类,我将其用作练习来尝试了解其工作原理,其定义如下: 标题: class
1) this 指针与其他指针有何不同?据我了解,指针指向堆中的内存。如果有指向它们的指针,这是否意味着对象总是在堆中构造? 2)我们可以在 move 构造函数或 move 赋值中窃取this指针吗?
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: C : pointer to struct in the struct definition 在我的初学者类
我有两个指向指针的结构指针 typedef struct Square { ... ... }Square; Square **s1; //Representing 2D array of say,
变量在内存中是如何定位的?我有这个代码 int w=1; int x=1; int y=1; int z=1; int main(int argc, char** argv) { printf
#include #include main() { char *q[]={"black","white","red"}; printf("%s",*q+3); getch()
我在“C”类中有以下函数 class C { template void Func1(int x); template void Func2(int x); }; template void
我是一名优秀的程序员,十分优秀!