#include <stdio.h> int main() { char ch=' '; scanf("%c",&ch); while(ch != '\n') { if('a'==ch) { ch='*'; } printf("%c",ch); scanf("%c",&ch); } return 0; }为什么不再写一个scanf会陷入死循环
时间: 2023-12-21 08:07:08 浏览: 191
这是因为在输入字符之后,scanf函数会将输入缓冲区中的回车符('\n')留在缓冲区中,下一次执行scanf时,它会读取到这个回车符,认为这是一个有效的输入,然后将其赋值给变量ch,导致循环无法结束。
为了避免这种情况,可以在scanf前加上空格,这样scanf函数会忽略掉输入缓冲区中的所有空格和回车符。修改后的代码如下:
```c
#include <stdio.h>
int main() {
char ch=' ';
scanf(" %c",&ch); // 加上空格
while(ch != '\n') {
if('a'==ch) {
ch='*';
}
printf("%c",ch);
scanf("%c",&ch);
}
return 0;
}
```
相关问题
#include<stdio.h> #include<stdbool.h> #include <stdlib.h> #include<string.h> int n,m; int matrix[100][100][100]={ 0 }; int main() { scanf("%d\n",&n); scanf("%d",&m); char ch; int row, col; int a; getchar(); for(int i=0;i<m;i++){ a=1; while((ch=getchar())!='}'&&scanf("<%d,%d>", &row, &col)) {matrix[i][row][col]=1;}// 读入元素的值 getchar(); for(int t=0;t<n;t++) { for(int j=0;j<n;j++) { if(matrix[i][t][j]) { for(int k=0;k<n;k++) { if(matrix[i][j][k]) { if(!matrix[i][t][k]) a=0; } } } } } if(a==1) printf("1\n"); if(a==0) printf("0\n"); } return 0; } 修改这串代码使其输入3 3 {<1,1>,<2,2>} {<1,2>,<2,3>} {<1,2>,<2,3>,<1,3>}时输出1 0 1
修改后的代码如下:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int n, m;
int matrix[100][100][100] = {0};
int main() {
scanf("%d\n", &n);
scanf("%d", &m);
char ch;
int row, col;
getchar();
for (int i = 0; i < m; i++) {
while ((ch = getchar()) != '}' && scanf("<%d,%d>", &row, &col)) {
matrix[i][row][col] = 1;
}
getchar();
bool flag = true;
for (int t = 0; t < n; t++) {
for (int j = 0; j < n; j++) {
if (matrix[i][t][j]) {
for (int k = 0; k < n; k++) {
if (matrix[i][j][k]) {
if (!matrix[i][t][k]) {
flag = false;
break;
}
}
}
}
if (!flag) break;
}
if (!flag) break;
}
if (flag)
printf("1\n");
else
printf("0\n");
}
return 0;
}
```
主要的修改在于读入矩阵的部分,需要在读入一个元素后调用 `getchar()` 去掉逗号和空格。另外,在计算每个矩阵是否为传递闭包时,需要使用 `flag` 变量来记录是否满足传递闭包的条件,如果不满足则直接跳出循环。
#include <stdio.h> #include <stdlib.h> void main() { int i; int sum = 0; char ch; printf("请输入一串整数和任意数目的空格:"); while (scanf_s("%d", &i) == 1) { sum += i; while ((ch = getchar()) == ' '); if (ch == '\n') { break; } ungetc(ch, stdin); } printf("结果是%d", sum); printf("\n"); system("pause"); }解释每一行代码
下面是对程序每一行代码的解释:
```c
#include <stdio.h>
#include <stdlib.h>
```
这两行代码是包含了两个标准库头文件,分别是stdio.h和stdlib.h,前者提供了输入输出函数的声明,后者提供了一些通用的函数和定义。
```c
void main()
```
这是程序的入口函数,void表示该函数没有返回值,main函数是程序的入口点
阅读全文