[英]I don't know why I got it wrong in my code. c language, string iterations
问题 接收到字符串 S 后,编写一个程序,将每个字符重复 R 次,创建一个新字符串并打印出来。 也就是说,您可以通过将第一个字符重复 R 次和将第二个字符重复 R 次来生成 P。 S 仅包含 QR 码“字母数字”字符。
二维码“字母数字”字符为 0123456789ABCDEFGHIJK
输入 第一行给出了测试用例的数量 T (1 ≤ T ≤ 1,000)。 每个测试用例通过将重复次数 R (1 RR 88) 和字符串 S 划分为空格来给出。 S 的长度至少为 1 且不超过 20 个字符。
输出 每个测试用例的输出 P。
输入示例
2
3 ABC
5 /HTP
输出示例
AAABBBCCC
/////HHHHHTTTTTPPPPP
我的代码:
#include<stdio.h>
int main() {
int a=0;
scanf("%d", &a);
for (int k = 0; k < a; k++) {
int d;
char b[20];
scanf("%d", &d);
scanf("%s", &b);
for (int i = 0; b[i]!=NULL; i++) {
for (int j = 0; j < d; j++) {
printf("%c", b[i]);
}
}
}
}
代码中有一个问题:
scanf("%s", b);
我们写“b”而不是“&b”
'&' 用于获取变量的地址。 C 没有字符串类型,字符串只是一个字符数组,一个数组变量存储第一个索引位置的地址。默认情况下,变量本身指向基地址,因此要访问字符串的基地址,没有需要添加一个额外的'&'
所以我们可以写:
#include<stdio.h>
int main() {
int a=0;
scanf("%d", &a);
for (int k = 0; k < a; k++) {
int d;
scanf("%d", &d);
char b[20];
scanf("%s",b);
for (int i = 0; b[i]; i++) {
for (int j = 0; j < d; j++) {
printf("%c", b[i]);
}
}
printf("\n");
}
}
size_t
遍历数组char b[20];
, b
衰减为指针( sizeof()
运算符是一个例外)scanf("%s", &b);
, &b
不是必需的,它会导致未定义的行为,只需b
就可以了scanf()
输入是否成功"%s"
,使用"%<WIDTH>s"
,以避免缓冲区溢出b[i]!=NULL
是完全错误的, NULL
是一个指针,而b[i]
是一个char
,并且char
不能与pointer
进行比较,你应该检查'\0'
或只是0
= {}
初始化变量b
,然后b
的所有元素将为0
b
的长度应为21
+1#include <stdio.h>
#include <stdlib.h>
int main(void) {
int a = 0;
if (scanf("%d", &a) != 1) {
fputs("bad input", stderr);
return EXIT_FAILURE;
}
for (int k = 0; k < a; k++) {
int d;
if (scanf("%d", &d) != 1) {
fputs("bad input", stderr);
return EXIT_FAILURE;
}
char b[21] = {};
if (scanf("%20s", b) != 1) {
fputs("bad input", stderr);
return EXIT_FAILURE;
}
for (size_t i = 0; b[i] != 0; i++) {
for (int j = 0; j < d; j++) {
printf("%c", b[i]);
}
}
puts("\n");
}
return EXIT_SUCCESS;
}
2
3 ABC
5 /HTP
AAABBBCCC
/////HHHHHTTTTTPPPPP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.