gpt4 book ai didi

c - putc 在单独的行 C 中将字符串打印到单词

转载 作者:行者123 更新时间:2023-11-30 17:38:22 26 4
gpt4 key购买 nike

我想将字符串打印到每行中的每个单词。看起来 putc 不起作用,为什么我不能在 C 编程语言中使用 putchar ?

#include <stdio.h>
#include <conio.h>
#include <string.h>
void main() {
char s[50];
int i, len;
printf("\enter string : ");
gets(s);
len = strlen(s);
i = 0;
while (i<len) {
while (s[i] == ' ' && i<len)
i++;
while (s[i] != ' ' && i<len)
putc(s[i++], stdout);
putc('\n', stdout);
}
getch();
}

最佳答案

您的代码没有任何严重错误,除了:

  • 使用 conio.hgetch 等非标准功能;
  • 使用不安全函数(这在类作业中往往不那么重要);
  • while 语句中的条件顺序错误,这可能会导致未定义的行为。

因此,这段代码似乎可以满足您的需要:

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

int main (void) {
char s[50];
int i, len;
printf("enter string : ");
gets(s);
len = strlen(s);
i = 0;
while (i<len) {
while (i < len && s[i] == ' ')
i++;
while (i < len && s[i] != ' ')
putc(s[i++], stdout);
putc('\n', stdout);
}
return 0;
}

然而,它并不是那么干净,专业的编码员会倾向于选择更多的模块化和有值(value)的评论,如下所示。首先,一些用于跳过空格和回显单词的通用函数:

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

static char *skipSpaces (char *pStr) {
// Just throw away spaces, returning address of first non-space.

while (*pStr == ' ')
pStr++;
return pStr;
}

static char *echoWord (char *pStr) {
// If at end of string, say so.

if (*pStr == '\0')
return NULL;

// Echo the word itself.

while ((*pStr != '\0') && (*pStr != ' '))
putchar (*pStr++);

// Then skip to start of next word (or end of string).

pStr = skipSpaces (pStr);

// Return new pointer.

return pStr;
}

这样,主程序就变得更容易理解了:

int main (void) {
// Get string from user in a more safe manner.

char str[50];
printf("Enter string: ");
fgets (str, sizeof (str), stdin);

// Remove newline if there.

size_t len = strlen (str);
if ((len > 0) && (str[len-1] == '\n'))
str[len-1] = '\0';

// Start with first real character.

char *pStr = skipSpaces (str);

// Process words and space groups (adding newline) until at end of string.

while ((pStr = echoWord (pStr)) != NULL)
putchar ('\n');

return 0;
}

关于c - putc 在单独的行 C 中将字符串打印到单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22154523/

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