取字符串输入直到等于“/0”
Take string input until it is equal to "/0"
我希望用户最多输入 R 字符串,直到循环结束或直到他们按下 ENTER,所以输入基本上等于“\0”。
然后我想统计用户输入的字符数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define R 5
#define C 2
int main(){
char Pin[R][C];
char str[100];
for(int i = 0; i < R; i++){
printf("Enter a string: ");
scanf("%s", &Pin[i]);
if(str == "[=10=]"){break;}
strcpy(Pin[i],str);
}
int sum = 0;
for(int i = 0; i < R; i++){
for(int j = 0; j < C; j++){
int kapa = sizeof Pin[i];
sum += kapa;
}
}
printf("\n\n%d", sum);
return 0;
}
这是我的代码,但每当我按下回车键以获取另一个输入时,它都会跳过一次。
另一个问题是它也计算字符“\n”,如果它不计算的话我会更喜欢它。
提供的程序没有意义。
例如每个字符数组 Pin[i] 最多可以包含一个字符串,如果不计算字符串的终止零字符 '[=15=]'
。
在此for循环中
for(int i = 0; i < R; i++){
printf("Enter a string: ");
scanf("%s", &Pin[i]);
if(str == "[=10=]"){break;}
strcpy(Pin[i],str);
}
使用了未初始化的数组str
,在循环中没有改变。
这个if语句
if(str == "[=11=]"){break;}
的计算结果始终为 false,因为比较了数组 str
和字符串文字 "[=18=]"
的第一个字符的两个指针。由于它们占用的内存范围不同,因此它们的地址也不同。
还有关于输入了多少字符串的信息存储在任何地方。
这些嵌套的for循环
for(int i = 0; i < R; i++){
for(int j = 0; j < C; j++){
int kapa = sizeof Pin[i];
sum += kapa;
}
}
也说不通。例如索引 j
未被使用。表达式 sizeof Pin
是常量表达式,根据数组 Pin
的定义,其计算结果始终为 2
。您需要使用函数 strlen
而不是运算符 sizeof
.
看来你的意思是下面的
#include <stdio.h>
#include <string.h>
int main( void )
{
enum { R = 5, C = 100 };
char Pin[R][C];
size_t n = 0;
for (; n < R; n++)
{
char s[C];
s[0] = '[=13=]';
printf( "Enter a string: " );
if ( !fgets( s, sizeof( s ), stdin ) || s[0] == '\n') break;
s[strcspn( s, "\n" )] = '[=13=]';
strcpy( Pin[n], s );
}
size_t sum = 0;
for (size_t i = 0; i < n; i++)
{
sum += strlen( Pin[i] );
}
printf( "\nsum of lengths of the strings is %zu\n", sum );
}
程序输出可能看起来像
Enter a string: 1
Enter a string: 12
Enter a string: 123
Enter a string:
sum of lengths of the strings is 6
我希望用户最多输入 R 字符串,直到循环结束或直到他们按下 ENTER,所以输入基本上等于“\0”。 然后我想统计用户输入的字符数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define R 5
#define C 2
int main(){
char Pin[R][C];
char str[100];
for(int i = 0; i < R; i++){
printf("Enter a string: ");
scanf("%s", &Pin[i]);
if(str == "[=10=]"){break;}
strcpy(Pin[i],str);
}
int sum = 0;
for(int i = 0; i < R; i++){
for(int j = 0; j < C; j++){
int kapa = sizeof Pin[i];
sum += kapa;
}
}
printf("\n\n%d", sum);
return 0;
}
这是我的代码,但每当我按下回车键以获取另一个输入时,它都会跳过一次。 另一个问题是它也计算字符“\n”,如果它不计算的话我会更喜欢它。
提供的程序没有意义。
例如每个字符数组 Pin[i] 最多可以包含一个字符串,如果不计算字符串的终止零字符 '[=15=]'
。
在此for循环中
for(int i = 0; i < R; i++){
printf("Enter a string: ");
scanf("%s", &Pin[i]);
if(str == "[=10=]"){break;}
strcpy(Pin[i],str);
}
使用了未初始化的数组str
,在循环中没有改变。
这个if语句
if(str == "[=11=]"){break;}
的计算结果始终为 false,因为比较了数组 str
和字符串文字 "[=18=]"
的第一个字符的两个指针。由于它们占用的内存范围不同,因此它们的地址也不同。
还有关于输入了多少字符串的信息存储在任何地方。
这些嵌套的for循环
for(int i = 0; i < R; i++){
for(int j = 0; j < C; j++){
int kapa = sizeof Pin[i];
sum += kapa;
}
}
也说不通。例如索引 j
未被使用。表达式 sizeof Pin
是常量表达式,根据数组 Pin
的定义,其计算结果始终为 2
。您需要使用函数 strlen
而不是运算符 sizeof
.
看来你的意思是下面的
#include <stdio.h>
#include <string.h>
int main( void )
{
enum { R = 5, C = 100 };
char Pin[R][C];
size_t n = 0;
for (; n < R; n++)
{
char s[C];
s[0] = '[=13=]';
printf( "Enter a string: " );
if ( !fgets( s, sizeof( s ), stdin ) || s[0] == '\n') break;
s[strcspn( s, "\n" )] = '[=13=]';
strcpy( Pin[n], s );
}
size_t sum = 0;
for (size_t i = 0; i < n; i++)
{
sum += strlen( Pin[i] );
}
printf( "\nsum of lengths of the strings is %zu\n", sum );
}
程序输出可能看起来像
Enter a string: 1
Enter a string: 12
Enter a string: 123
Enter a string:
sum of lengths of the strings is 6