我正在读一个.txt文件.我正在使用fscanf来获取格式化的数据.我遇到问题的这条线是这样的:
result = fscanf(fp, "%s", ap->name);
Run Code Online (Sandbox Code Playgroud)
这是好的,直到我有一个空格的名称,例如:St Ives所以我用这个来读取空白区域:
result = fscanf(fp, "%[^\n]s", ap->name);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试读取第一个名称(没有空白区域)时,它只是不起作用并且弄乱了其他的fscanf.
但我使用[^ \n]它在我正在使用的不同文件中工作正常.不确定发生了什么.
如果我在fscanf的位置使用fgets,我会在变量中得到"\n".
编辑//
好的,所以如果我使用:
result = fscanf(fp, "%s", ap->name);
result = fscanf(fp, "%[^\n]s", ap->name);
Run Code Online (Sandbox Code Playgroud)
这允许我读入没有空格的字符串.但是当我得到一个带有空格的"名字"时它不起作用.
这是一个快速的问题,我做了一个搜索,但找不到任何回答我的问题.
在C中执行递归函数时,即使使用void函数也需要返回吗?
例如:
void addToLL(structA_ptr new, structA_ptr cur) {
if (cur->next == NULL) {
cur->next = new;
} else {
addToLL(new, cur->next);
}
}
Run Code Online (Sandbox Code Playgroud)
我是否需要在调用函数之前放置一个return关键字?我知道如果函数会返回一些东西,比如在LL中搜索某些内容,则需要一个return语句.
我有一个表,其中包含保存材料的另一个主题类型.然后,我有另一个表,其中包含每个表的键,从而创建多对多的关系.
但是,当我尝试搜索主题以选择两个共享相同材料的主题时,它不起作用.
示例表:
材料表:
MatID | Name
---------------
1 | book1
2 | note23
Run Code Online (Sandbox Code Playgroud)
主题表:
TID | topic
---------------
1 | computer
2 | database
Run Code Online (Sandbox Code Playgroud)
MatTop表:
TID | MatID
------------
1 | 2
2 | 2
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
SELECT * FROM material
INNER JOIN mattop ON material.MatID = mattop.MatID
INNER JOIN topic ON mattop.TID = topic.TID
WHERE (topic.topic = 'computer') AND (topic.topic = 'database')
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
编辑 - 我知道AND是抱歉的错误.我的意思是如何让它输出具有与之相关的主题的材料.