gpt4 book ai didi

c - printf 在 C 中用\r删除内容

转载 作者:行者123 更新时间:2023-11-30 17:10:13 26 4
gpt4 key购买 nike

在 C 中,我正在做一个分词器。我遇到了麻烦,因为我注意到如果我输入:

printf ("String of text\r");

所有在'\r'之前写入的内容都不会被打印。

所以,如果我想标记 "String of text\r" ,最后一个标记应该是 "Text",不,它的 "ext “

有人知道为什么吗?

编辑:代码在这里。如果我打印 args[0]、args[1]... 和 Im char[] str = "cadena de texto\r"

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int
detectpattern(char target)
{
int patternsize;
int contador;
int found;
char pattern[] = {'\t', '\r', ' ', '\n', ' '};

patternsize = sizeof(pattern)/sizeof(char);
contador = 1;

while (contador <= patternsize) {
if (pattern[contador] == target) {
found = 1;
break;
}
else {
found = 0;
}
contador++;
}
return found;
}

void
ispattern(char *str, int *inword){
if (*inword != 0) {
*inword = 0;
*str = '\0';
}
}

void
isword(char *str, int *inword, char **args, int *words){
if (*inword == 0) {
*inword = 1;
args[*words] = str;
*words = *words + 1;
}
}

int
mytokenize(char *str, char **args, int maxargs) {
int i;
int intword;
int intwords;
int * inword = &intword;
int * words = &intwords;

intword = 0;
intwords = 0;
i = 0;

if (!str[i]) {
printf("String no válido");
exit(0);
}

while (str[i] != '\0') {
if (detectpattern(str[i])) {
ispattern(&str[i], inword);
} else {
isword(&str[i], inword, args, words);

}
if (*words == maxargs) {
break;
}
i++;
}
return *words;
}

enum{
maxargs = 2,
};

int
main(int argc, char *argv[]){
char str[] = "cadena de texto";
char *strptr = &str[0];
char *array_punteros[maxargs];

mytokenize(strptr, array_punteros, maxargs);

exit(0);
}

最佳答案

\r 是回车符。它会导致您的终端模拟器将光标移动到行的开头 - 甚至可能会删除该行。尝试打印到文件并使用 vi 或 emacs 等编辑器打开它。

这是一个例子:

#include <stdio.h>
int main(int argc, char **argv) {
printf("aaa test\r");
printf("bbb test\r");

}

在终端上仅生成 bbb 测试

在 cygwin 上使用 gcc 4.9 进行测试。

关于c - printf 在 C 中用\r删除内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com