用C打印一个句子的单词?

时间:2016-05-09 18:51:14

标签: c

我试着了解一些关于char的事情。

我写了这段代码,但它给出了错误。为什么我不能扫描" Hello world",并且只得到" Hello"用这个代码? (我以为st1 [0] = Hello st1 [1] = world)

我该怎么办?

char st1[100];
gets(st1);
printf("%s",st1[0]);

5 个答案:

答案 0 :(得分:0)

有多种方式......最简单的方法是执行以下操作:

char *str1[] = {"Hello", "World"};

现在这些单词存储在splited数组中。访问“你好”#39;使用str1[0]

另一种方法是通过char打印char,直到你打印出'Hello'

示例(其中str1是代码中的那个):

for(int x = 0; x < strlen("Hello") && x < strlen(str1); x++)
    printf("%c", str1[x]);

你的错误:

C中的字符串只是一个字符数组,所以String&#39; Hello World&#39;将是&#39; H&#39;第二个将是&#39; e&#39;等等..

答案 1 :(得分:0)

st1[0]只是短语中的第一个字符。您可以迭代直到匹配' '(空格)或到达字符串的末尾:

char st1[100];
gets(st1);
for (int i=0; i<100 && st1[i]!=' '; ++i) {
    printf("%c",st1[i]);
}

答案 2 :(得分:0)

使用puts(st1)打印字符串 通过将st1[0]放在printf中,您告诉程序只打印字符串的第一个元素。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char x[100];
    gets(x);
    puts(x);
    return 0;
}

答案 3 :(得分:0)

st1[0]是一个字符,而不是C字符串。

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

int main(void){
    char st1[100];

    if(fgets(st1, sizeof st1, stdin)){
        char *p = strchr(st1, ' ');
        if(p != NULL)
            *p = 0;
        printf("%s\n", &st1[0]);
    }
    return 0;
}

答案 4 :(得分:0)

您发布的内容很可能不是您使用的代码(请参阅下面的第2项)。

  1. 请注意,编译器可能会为您提供包含printf()调用的行的提示。问题是你在st1 []中存储了一串字符。在C中,字符串(a.k.a. C-strings)存储在以空值终止的char数组中(=以ASCII代码0,a.k.a。'\ 0',字符终止的char数组)。当你写st1 [0]时 - 这意味着只是数组中的一个(第一个)字符,而不是整个以null结尾的C字符串。
  2. 您的代码由两部分组成:扫描数据并输出数据。对于您当前的问题,您只需要更正输出(但也请参阅我对gets()的以下观点): char st1[100]; gets(st1); printf("%s",st1); //this is where you need a correction ...作为格式化字符串中的“%s”序列使printf()期望一个地址,并且数组(st1)的名称衰减为C中的指针(地址)。您的错误在于使用索引(st1 []) ,这并不意味着'地址',而是意味着'从表中只拿一个字符'。显然,第一个字符(如果你输入'Hello','H')与整个数组所在的内存地址完全无关。它也不太可能偶然地指向你的报告中的一些“Hello”字符串(因此我认为代码并不完全是你运行的)。
  3. 至于现在,我暂时搁置你使用get()的问题,这应该被认为是不安全的。考虑使用fgets()代替。或者,当用户尝试输入的字符超过st1 []中的空间时,您会注意到奇怪的行为,并且计算机开始覆盖程序堆栈的其他部分,从而破坏您的其他无辜变量。
相关问题