【问题标题】:C program, strlen not counting whitespace?C程序,strlen不计算空格?
【发布时间】:2021-12-27 18:57:42
【问题描述】:

我写了一个简单的程序,程序按顺序输入并打印出字符并计数

char name[100];
int counter=0
printf("Enter name and surname:");
scanf("%s",&name);
    
for(int i=0; i<(strlen(name)); i++){
        printf("%c \n",name[i]);
        counter++;
printf("%d",counter)

由于某种原因,当我输入 John Snow 时,它只打印出来

J
o
h
n 
4

想要的输出

J
o
h
n

S
n
o
w
10

有什么帮助吗?在合理的技能水平内:D 如果可能没有 malloc() free() 和内存的东西,它应该很容易:D

【问题讨论】:

  • %s 只读取一个单词。里面不能有空格。
  • 顺便说一句,在name 之前删除&amp;。当用作函数参数时,数组会自动衰减为指针。
  • oh dam.... 我该如何修复它以使用空格读取?
  • 使用fgets() 读取整行输入。
  • 您可以改为阅读整行,例如使用fgets。但是您可能还想阅读Removing trailing newline character from fgets() input

标签: c scanf c-strings fgets strlen


【解决方案1】:

对于初学者,您必须编写

scanf("%s",name);

而不是

scanf("%s",&name);

其次,当使用格式字符串"%s"时,一旦遇到空白字符,函数就会停止输入字符。

你应该改写

scanf( " %99[^\n]", name );

另一种方法是使用函数fgets

fgets( name, sizeof( name ), stdin );

该函数可以将换行符'\n' 附加到输入的字符串中。要删除它,您可以编写

name[ strcspn( name, "\n" ) ] = '\0';

【讨论】:

  • 当我把 scanf("%99[^\n]", name);它会自动跳过输入,不让我输入任何内容
  • @D.K.请参阅格式字符串中符号 % 之前的空白。
猜你喜欢
  • 2018-10-16
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多