输入一行字符串,并存储在字符数组中。输入的字符串长度未知,以换行为结束,中间不包含空格。
%s 读入字符串
%s
读入字符串,编译器会自动在字符串的末尾加上零终止符 '\0'
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <stdio.h>
int main() { char str[100];
scanf_s("%s", str, 100);
printf("%s\n", str);
return 0; }
|
gets() 读入字符串
gets()
读入字符串,编译器会自动在字符串的末尾加上零终止符 '\0'
。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main() { char str[100];
gets_s(str, 100);
printf("%s\n", str);
return 0; }
|
%c 循环读入字符串
%c
按字符,不断循环读入字符串,需要手动在字符串的末尾加上零终止符 '\0'
。
如果以 %c
按字符循环输出,可以不手动添加零终止符,但是任何依赖于零终止符的字符串函数都会出现问题。
或者可以对字符数组进行初始化赋值,例如 char str[100] = { '\0' };
这样也不用手动添加零终止符 '\0'
。
while 循环
对输入的字符进行判断并作为循环判断的条件,这里不能用 scanf
替代 getchar()
。
因为 (ch = getchar()) != '\n'
等同于 ch = getchar(); ch !='\n'
,而 scanf 的返回值并不是输入的字符 ch
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <stdio.h>
int main() { char str[100]; char ch; int len = 0; while ((ch = getchar()) != '\n') { str[len++] = ch; } str[len] = '\0';
for (int i = 0; i < len; i++) { printf("%c", str[i]); } printf("\n");
return 0; }
|
也可以写一个死循环不断的读入字符,直到判定字符串输入结束后将循环 break 。
这里可以用 scanf
替代 getchar()
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <stdio.h>
int main() { char str[100];
char ch; int len = 0; while (scanf_s("%c", &ch)) { if (ch == '\n') { str[len] = '\0'; break; } else { str[len] = ch; } len++; }
for (int i = 0; i < len; i++) { printf("%c", str[i]); } printf("\n");
return 0; }
|
for 循环
其实就是将 while
循环语句转为 for
循环语句,这里只写一个例子作为参考。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <stdio.h>
int main() { char str[100];
char ch; int len = 0; for (; (ch = getchar()) != '\n'; len++) { str[len] = ch; } str[len] = '\0';
for (int i = 0; i < len; i++) { printf("%c", str[i]); } printf("\n");
return 0; }
|