这是我计算给定字符串的字符数的代码(即使用strlen()函数):
#include <stdio.h>
#include <string.h>
#define N 30
int main() {
char input[N];
gets(input);
int j = strlen(input);
printf("using library fnc strlen=%d", j);
int i = 0, sum = 0;
for (i = 0; input[i] != '\0'; i++) {
sum = sum + i;
}
printf("\rusing loop %d", sum);
}
Run Code Online (Sandbox Code Playgroud)
在Code::Blocks(gcc编译器)上,结果显示如下:
abcdef78
using loop 4y fnc strlen=8
Process returned 0 (0x0) execution time : 5.816 s
Press any key to continue.
Run Code Online (Sandbox Code Playgroud)
但是Programiz的在线编译器显示是这样的:
/tmp/rzNX0Zm3SF.o
abcdef78
using library fnc strlen=8
using loop 8
Run Code Online (Sandbox Code Playgroud)
但是在我更改了代码之后\r,\n如下所示:
#include <stdio.h>
#include <string.h>
#define N 30
int main() {
char input[N];
gets(input);
int j = strlen(input);
printf("using library fnc strlen=%d", j);
int i = 0, sum = 0;
for (i = 0; input[i] != '\0'; i++) {
sum = sum + 1;
}
printf("\nusing loop %d", sum);
}
Run Code Online (Sandbox Code Playgroud)
代码在任何地方都可以正常工作(Code::Blocks 也是如此)这\r和怎么了\n?
你的第一个代码有
for(i=0;input[i]!='\0';i++) {
sum = sum + i;
}
Run Code Online (Sandbox Code Playgroud)
你的第二个代码有
for(i=0;input[i]!='\0';i++) {
sum = sum + 1;
}
Run Code Online (Sandbox Code Playgroud)
即对于五个字符的字符串,第一个计算 0 + 1 + 2 + 3 + 4,而第二个计算 1 + 1 + 1 + 1 + 1。
除此之外,\r只需将光标返回到行首,同时\n前进到下一行。
IOW,打印foo\rbar只会显示bar,因为您正在打印foo,倒带到行首并用 覆盖它bar。