Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的字符数组为C中的每个索引返回不同的字符_C_String - Fatal编程技术网

为什么我的字符数组为C中的每个索引返回不同的字符

为什么我的字符数组为C中的每个索引返回不同的字符,c,string,C,String,我有一个字符串,我声明为char myStr[]=“5.3 2.4 1.8” 当我直接用printf打印它时,它似乎打印出了我所期望的内容。然而,当我打印每个索引时,我得到的不是myStr[3]='',而是myStr[3]=32。下面是我的代码和输出。我想知道为什么会发生这种情况,以及如何确保将空格解释为空格而不是数字32 #include <stdio.h> #include <string.h> int words(char myStr[ ]); int main

我有一个字符串,我声明为char myStr[]=“5.3 2.4 1.8”

当我直接用printf打印它时,它似乎打印出了我所期望的内容。然而,当我打印每个索引时,我得到的不是myStr[3]='',而是myStr[3]=32。下面是我的代码和输出。我想知道为什么会发生这种情况,以及如何确保将空格解释为空格而不是数字32

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

int words(char myStr[ ]);

int main(){
char myStr[ ] = “5.3 2.4 1.8”;
printf(“myStr is: %s\n", myStr);
words(myStr);
}

int words(char myStr[ ]){
  int i, length, count=0, prev=0;
  length= strlen(myStr);

   printf("The length of myStr is: %d\n", length);

  for (i=0; i<length; i++){
   printf("The %d letter of myStr is: %d\n", i, myStr[i]);
   if (myStr[i] != ' '){
      if (prev=0)
        count++;
      else
        prev=1;
    }
    else
      prev=0;
  }
  return count;
}

谢谢你的建议

原因根据

printf
中,使用
%c
将获得字符,
%d
将获得整数

e、 g:

输出将是:

A
65
a的记忆就像

        +-----------+                
    a   | 01000001  |                
        +-----------+                

两个不同的结果仅仅是因为
printf
的输出格式导致每个
char
从内存的角度存储为8位宽度的整数,根据

printf
中,使用
%c
将获得字符,
%d
将获得整数

e、 g:

输出将是:

A
65
a的记忆就像

        +-----------+                
    a   | 01000001  |                
        +-----------+                

两个不同的结果仅仅是因为
printf
的输出格式导致每个
char
从内存的角度存储为8位宽度的整数,根据

printf
中,使用
%c
将获得字符,
%d
将获得整数

e、 g:

输出将是:

A
65
a的记忆就像

        +-----------+                
    a   | 01000001  |                
        +-----------+                

两个不同的结果仅仅是因为
printf
的输出格式导致每个
char
从内存的角度存储为8位宽度的整数,根据

printf
中,使用
%c
将获得字符,
%d
将获得整数

e、 g:

输出将是:

A
65
a的记忆就像

        +-----------+                
    a   | 01000001  |                
        +-----------+                
两个不同的结果仅仅是因为
printf的输出格式
如果我们查看for
printf()
,我们会发现如果我们想要打印一个整数,我们将使用
%d
。您声称要打印一个字符。这是
%c

那么,让我们修复对
printf()
的调用:

如果我们查看for
printf()
,我们会发现如果我们想要打印一个整数,我们将使用
%d
。您声称要打印一个字符。这是
%c

那么,让我们修复对
printf()
的调用:

如果我们查看for
printf()
,我们会发现如果我们想要打印一个整数,我们将使用
%d
。您声称要打印一个字符。这是
%c

那么,让我们修复对
printf()
的调用:

如果我们查看for
printf()
,我们会发现如果我们想要打印一个整数,我们将使用
%d
。您声称要打印一个字符。这是
%c

那么,让我们修复对
printf()
的调用:



使用
%c
将其解释为字符,而不是将打印字符的ASCII值的
%d
。同时将
if(prev=0)
更改为
if(prev==0)
=
是赋值运算符,与比较运算符
=
不同。要打印字符,请使用
%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48和57之间一样,空格是32,小数点是46。使用
%c
将其解释为字符,而不是将打印字符的ASCII值的
%d
。同时将
if(prev=0)
更改为
if(prev==0)
=
是赋值运算符,与比较运算符
=
不同。要打印字符,请使用
%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48和57之间一样,空格是32,小数点是46。使用
%c
将其解释为字符,而不是将打印字符的ASCII值的
%d
。同时将
if(prev=0)
更改为
if(prev==0)
=
是赋值运算符,与比较运算符
=
不同。要打印字符,请使用
%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48和57之间一样,空格是32,小数点是46。使用
%c
将其解释为字符,而不是将打印字符的ASCII值的
%d
。同时将
if(prev=0)
更改为
if(prev==0)
=
是赋值运算符,与比较运算符
=
不同。要打印字符,请使用
%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48到57之间一样,空格是32,小数点是46。谢谢@simon_xia。我注意到的一个附带问题是行if(myStr[I]!='')。出于某种原因,即使myStr是字符类型,每次的计算结果都是false。因此,当我运行int words()函数时,我得到零个单词,而我应该得到3(因为myStr“5.3 2.4 1.8”中有两个空格)。您知道如何让我的程序将myStr[3]识别为“”,以便语句if(myStr[I]!='')将计算为true两次,并返回三个字数?再次感谢…@user2808302 the
mystr[i]!=''工作正常。您可能会感到困惑,因为
if(prev=0)
没有按照您的想法执行does@user2808302语句
if(prev=0)
应该是
if(prev=0)
PS:使用
int单词(char*myStr)是一个很好的做法输入