C语言:关于键盘连续输入两行字符

本文讨论了在C语言中,连续使用scanf可能导致读入额外的换行符问题,给出了五种解决方法,包括在%c前添加空格、使用%s 、调用getchar()和替换gets()函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【若连续使用两个scanf,会把第一行后的回车读入第二个scanf】

如:

scanf("%s",str);
scanf("%c",&ch); //此时储存于&ch中的是换行符

解决方案:

scanf("%s",str);
scanf(" %c",&ch); //%c前加一个空格

scanf("%s\n",str); //加入\n吸纳键盘输入的回车
scanf("%c",&ch);

scanf("%s",str);
getchar(); //吸纳键盘输入的回车
scanf("%c",&ch);

gets(str); //改用gets输入(不会读入换行符)
scanf("%c",&ch);

    gets(str);
    ch=getchar(); //不用scanf

//输出
    puts(str);
    putchar(ch);
    return 0;
}

在C语言中,你可以通过以下几个步骤来实现从键盘输入三行字符并将其写入到`str.txt`文件,然后读取并显示文件内容: 1. **打开文件**: 使用标准库函数`fopen()`创建一个文件指针,如果文件不存在则创建。例如: ```c FILE *file; file = fopen("str.txt", "w"); ``` 2. **获取用户输入**: 用`fgets()`函数读取用户输入的三行字符,并将它们存储在一个缓冲区中,假设这个缓冲区叫`input`: ```c char input[100]; for (int i = 0; i < 3; i++) { fgets(input, sizeof(input), stdin); // 移除末尾的换行符 input[strlen(input) - 1] = '\0'; } ``` 3. **写入文件**: 将用户的输入逐行写入文件: ```c fprintf(file, "%s\n", input); // 写入一行 ``` 重复这个过程两次。 4. **关闭文件**: 读写完成后,记得关闭文件以释放资源: ```c fclose(file); ``` 5. **读取并显示文件内容**: 如果你想在屏幕上显示文件的内容,可以再次打开文件,然后使用`fgets()`读取内容并打印出来。注意这里应该使用"r"模式来读取而非写入: ```c file = fopen("str.txt", "r"); if (file != NULL) { char content[100]; while (fgets(content, sizeof(content), file)) { printf("%s", content); } fclose(file); } else { printf("Error opening the file.\n"); } ``` 如果你需要运行完整的程序,这只是一个基本框架,还需要处理可能出现的错误情况。下面是完整的示例代码: ```c #include <stdio.h> int main() { FILE *file; // 打开文件 file = fopen("str.txt", "w"); if (file == NULL) { perror("Failed to open file"); return 1; } // 获取用户输入并写入文件 char input[100]; for (int i = 0; i < 3; i++) { fgets(input, sizeof(input), stdin); input[strlen(input) - 1] = '\0'; // 去除末尾换行符 fprintf(file, "%s\n", input); } // 关闭文件 fclose(file); // 读取并显示文件内容 file = fopen("str.txt", "r"); if (file != NULL) { char content[100]; while (fgets(content, sizeof(content), file)) { printf("%s", content); } fclose(file); } else { perror("Failed to read file"); } return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值