Онлайн компилятор C

#include <stdio.h> int main() { int k,n=0,p; char s[1001] , t[1001]; scanf("%d", &k); while ((s[n]=getchar())!= EOF) { n++; } s[n] = '\0'; printf("k = %d s = %s\n", k,s); p=0; for (int i = n-k; i<n; i++) { t[p++]=s[i]; } printf(" t = %s\n", t); for (i=0;i<n-k;i++){ t[p++]=s[i]; t[p]=0; } printf("%c", t); return 0; }
这段代码试图实现一个字符串循环右移k位的功能,但存在几个问题。

代码首先读取一个整数k,然后通过getchar()逐个读取字符直到EOF,存入数组s。接着从s的末尾取k个字符放入t的前面,再把s的前n-k个字符接在后面,期望得到循环右移后的结果。

- 变量i在第二个for循环中未定义。第一个for循环中定义了int i,但第二个for循环直接使用i,需要检查作用域。
- 最后的printf("%c", t)试图用%c打印字符串t,但%c只能打印单个字符,应该使用%s。
- 第二个for循环中每次循环都执行t[p]=0,这会导致每次循环都提前截断字符串,应该只在循环结束后设置一次结束符。