gpt4 book ai didi

c - 输入 : a2b3c4 and Output: aabbbcccc

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:34 26 4
gpt4 key购买 nike

我编写的代码没有产生任何输出。它只是将字符串作为输入:

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

int main() {
char str[100];
int i,size,s,pos;
scanf("%s", &str);
size=strlen(str);
for(i=0;i<size;i++) {
if((str[i]>=65 && str[i]<=90) || (str[i]>=97 && str[i]<=122)) {
i++;
} else {
if(str[i]>='0' && str[i]<='9') {
for(s=0;s<str[i];s++) {
printf("%s", str[i-1]);
}
}
i++;
}
}
}

最佳答案

整个代码有很多错误:

  • 您尝试使用 %s 打印单个字符,它用于字符串。这会导致未定义的行为——单个字符的正确转换是%c
  • 你循环直到一些“数字字符”,如 '3'。您想要循环直到数字 3。减去 '0' 以实现此目的。
  • 执行 scanf("%s", ...) 是潜在的未定义行为,它最终会溢出任何缓冲区。您可能想阅读我的 beginners' guide away from scanf() .简而言之,至少添加一个字段宽度,在您的情况下 scanf("%99s", ...)
  • scanf() 需要一个指向放置数据的位置的指针,但 str 已经求值为指向第一个数组元素的指针。因此,在此处添加 &错误的,会导致更多未定义的行为
  • 始终检查可能失败的函数的返回值。如果您的 scanf() 无法转换某些内容,您的 str 将保持未初始化状态,并且以下 strlen()未定义的行为.
  • 您的代码使用 ASCII 值,这是非常常见的,但不是强制要求的;这样,它就无法在不使用 ASCII 的机器上运行。

甚至不需要为你想要实现的目标使用缓冲区,单个字符来保存最后读取的字符就足够了,就像这样(其他问题也在这个例子中得到修复):

#include <stdio.h>
#include <ctype.h>

int main(void)
{
int c;
int l = EOF;

while ((c = getchar()) != EOF)
{
if (isdigit(c) && isalpha(l))
{
for (int i = 0; i < c-'0'; ++i)
{
putchar(l);
}
}
l = c;
}

putchar('\n');
return 0;
}

作为一些进一步的建议:

  • 编译时启用编译器警告,例如使用 gcc 时,添加这些标志:

    -std=c11 -Wall -Wextra -pedantic

    这会发现您代码中的一些问题。

  • 阅读一本关于 C 的好书手册页中查找各个函数(在 *nix 系统上,尝试键入 man 2 printf 例如 .. 你也可以将它提供给谷歌并找到这些页面的网络版本)

关于c - 输入 : a2b3c4 and Output: aabbbcccc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45436599/

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