小编Mik*_*t25的帖子

是否可以区分fgets返回的错误

在查看fgets§7.21.7.2,3 的ISO C11标准时,会根据概要代码说明返回值:

#include <stdio.h>
char *fgets(char* restrict s, int n, FILE* restrict stream);
Run Code Online (Sandbox Code Playgroud)

如果成功,fgets函数返回s.如果遇到文件结尾且没有字符读入数组,则数组的内容保持不变,并返回空指针.如果在操作期间发生读取错误,则数组内容是不确定的,并返回空指针.

该标准表示为eof返回空指针,并且没有读入任何字符或发生读取错误.我的问题是,只是来自fgets和返回的空指针,是否有办法区分导致错误的两种情况中的哪一种?

c fgets

8
推荐指数
2
解决办法
758
查看次数

fgets在换行符之前设置null char后清除输入流

我有一个程序,用户输入两个输入。由于我无法控制用户输入的内容,因此用户可以超过数组的固定大小。由于fgets() appends在空字符之前将换行符保留在末尾,因此如果用户超出预期大小时无法容纳换行符,则空字符会截断输入。当用户点击Enter时,换行符是否仍存在于输入流中?如果是这样,这是为什么fgets()由于第一个输入中的换行符而第二次跳过的原因吗?

#include <stdio.h>
int main(){
    char str[5];
    fgets(str,5,stdin);
    printf("Output:%s",str);

    fgets(str,5,stdin);
    printf("Output:%s",str);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输入示例 ABCDE\n

输出量

Output:ABCDOutput:E
Run Code Online (Sandbox Code Playgroud)

读取该SO答案后,fgets()不再提示用户 ,问题似乎不是通过刷新输入流fflush(stdin),但我听到了相互矛盾的信息,因为这会导致不确定的行为。我的最后一个问题是,如果是导致问题的保留换行符,清除输入流的合适方法是什么?

c fgets

2
推荐指数
2
解决办法
964
查看次数

绘制SCNBox的边缘时没有对角线?

我正在使用Apple的ARKit制作AR应用程序,并且想要绘制盒子的线框轮廓。代码中描述的和图片中所示的斜线在盒子的每个面上绘制了斜边。它也隐藏了盒子另一侧的角。场景工具包中是否有办法让我摆脱对角线并使之成为透明的框,从而显示所有边缘和顶点?

let box:SCNNode = SCNNode(geometry: SCNBox(width: CGFloat(0.1), height: CGFloat(0.1), length: CGFloat(0.1), chamferRadius: CGFloat(0)))
box.geometry?.firstMaterial?.fillMode = .lines
box.geometry?.firstMaterial?.diffuse.contents = UIColor.green
Run Code Online (Sandbox Code Playgroud)

当前的SCNBox

scenekit swift scnnode arkit

0
推荐指数
1
解决办法
1017
查看次数

解析不同字符串的相等 XOR 值以进行字谜检测

我最近有一个面试问题,我必须编写一个接受两个字符串的函数,1如果它们是彼此的字谜,它将返回,否则返回0。为简化起见,两个字符串的长度相同,非空,并且仅包含小写字母和数字字符。

我实现了一个函数,该函数独立地累加每个字符串的每个字符的 XOR 值,然后比较每个字符串的最终 XOR 值以查看它们是否相等。如果是,我会返回1,否则返回0

我的功能:

int isAnagram(char* str1, char* str2){
    int xor_acc_1 = 0;
    int xor_acc_2 = 0;
    for(int i = 0; i<strlen(str1); i++){
        xor_acc_1 ^= str1[i] - '0';
        xor_acc_2 ^= str2[i] - '0';
    }
    return xor_acc_1 == xor_acc_2;
}
Run Code Online (Sandbox Code Playgroud)

除了一个测试用例,我的函数适用于每个用例。

char* str1 = "123";
char* str2 = "303";
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,尽管这两个字符串不是彼此的字谜,但它们都48作为 XOR 值返回。

我的问题是:通过修改 XOR 背后的数学,可以在线性时间内使用 XOR 解决这个问题,而不使用数据结构(例如 Map)?

c algorithm

-1
推荐指数
1
解决办法
392
查看次数

标签 统计

c ×3

fgets ×2

algorithm ×1

arkit ×1

scenekit ×1

scnnode ×1

swift ×1